From 59e6d3e05465b52af305bf97ce4c0a6ab6112345 Mon Sep 17 00:00:00 2001 From: codavidgarcia Date: Mon, 17 Aug 2026 10:41:28 -0500 Subject: [PATCH] Ship the Electron desktop app --- .github/workflows/release.yml | 51 + .github/workflows/test.yml | 8 +- .gitignore | 1 + CONTRIBUTING.md | 4 +- DESIGN-DNA.md | 117 +- FONT-LICENSE.txt | 93 - README.md | 66 +- SECURITY.md | 11 +- build/icon.svg | 6 + docs/context-switch.png | Bin 110550 -> 17043 bytes package-lock.json | 3583 ++++++++++++++++++++++++++++++++- package.json | 72 +- public/app.js | 465 ++--- public/index.html | 172 +- public/mark.svg | 5 - public/public-sans.woff2 | Bin 26832 -> 0 bytes public/site.webmanifest | 15 - public/styles.css | 851 ++------ src/cli.js | 216 -- src/main.js | 152 ++ src/preload.cjs | 18 + test/server.test.js | 40 - 22 files changed, 4402 insertions(+), 1544 deletions(-) create mode 100644 .github/workflows/release.yml delete mode 100644 FONT-LICENSE.txt create mode 100644 build/icon.svg delete mode 100644 public/mark.svg delete mode 100644 public/public-sans.woff2 delete mode 100644 public/site.webmanifest delete mode 100755 src/cli.js create mode 100644 src/main.js create mode 100644 src/preload.cjs delete mode 100644 test/server.test.js diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..d9f1f96 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,51 @@ +name: Release + +on: + push: + tags: ['v*'] + +permissions: + contents: write + +jobs: + create-release: + runs-on: ubuntu-latest + steps: + - name: Create GitHub release + env: + GH_TOKEN: ${{ github.token }} + run: gh release create "$GITHUB_REF_NAME" --repo "$GITHUB_REPOSITORY" --generate-notes + + build: + needs: create-release + strategy: + fail-fast: false + matrix: + os: [windows-latest, macos-latest, ubuntu-latest] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-node@v6 + with: + node-version: 24 + cache: npm + - run: npm ci + - run: npm run dist + env: + GH_TOKEN: ${{ github.token }} + - name: Upload Windows packages + if: runner.os == 'Windows' + shell: pwsh + env: + GH_TOKEN: ${{ github.token }} + run: gh release upload $env:GITHUB_REF_NAME (Get-ChildItem release -File -Filter *.exe | ForEach-Object FullName) --repo $env:GITHUB_REPOSITORY --clobber + - name: Upload macOS packages + if: runner.os == 'macOS' + env: + GH_TOKEN: ${{ github.token }} + run: gh release upload "$GITHUB_REF_NAME" release/*.dmg release/*.zip --repo "$GITHUB_REPOSITORY" --clobber + - name: Upload Linux packages + if: runner.os == 'Linux' + env: + GH_TOKEN: ${{ github.token }} + run: gh release upload "$GITHUB_REF_NAME" release/*.AppImage release/*.deb --repo "$GITHUB_REPOSITORY" --clobber diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 200abc1..1d85b63 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -13,13 +13,15 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest, windows-latest, macos-latest] - node: [20, 22] + node: [22, 24] runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - uses: actions/checkout@v6 + - uses: actions/setup-node@v6 with: node-version: ${{ matrix.node }} cache: npm - run: npm ci + env: + ELECTRON_SKIP_BINARY_DOWNLOAD: 1 - run: npm run check diff --git a/.gitignore b/.gitignore index f3bdfad..35d640a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ node_modules/ +release/ .DS_Store *.log coverage/ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7ff6944..320991c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -3,9 +3,9 @@ Thanks for helping improve Codex Context Switch. 1. Fork the repository and create a focused branch. -2. Keep the runtime dependency-free unless a dependency removes more risk than it adds. +2. Keep renderer dependencies at zero unless a dependency removes more risk than it adds. 3. Preserve comments, unknown keys, section ordering, and line endings in config fixtures. 4. Add a regression test for every config-writing change. 5. Run `npm run check` before opening a pull request. -UI changes should follow `DESIGN-DNA.md`, remain usable at 360px, preserve keyboard focus, and honor reduced-motion preferences. +UI changes should follow `DESIGN-DNA.md`, remain usable at the minimum 440 × 430px window size, preserve keyboard focus, and honor reduced-motion preferences. diff --git a/DESIGN-DNA.md b/DESIGN-DNA.md index e0ae3c7..453e3d5 100644 --- a/DESIGN-DNA.md +++ b/DESIGN-DNA.md @@ -1,96 +1,81 @@ -# Design DNA — Codex Context Switch +# Design DNA — Context Switch -> A local control panel for Codex users who want to tune long-context sessions without hand-editing TOML. It should feel like a trustworthy measuring instrument: exact, calm, reversible, and visibly local. +> A tiny desktop control, not a product landing page. The user opens it to change one number, apply it, and close it. -## 0. The product's world +## Product contract -- **Core metaphor:** a measuring rail. Context is a finite span; retained tokens and compaction headroom are visible lengths on the same scale. -- **Audience self-image:** developers and power users who value control, legibility, and proof before a tool edits their machine. -- **Category cliché:** dark developer dashboards with neon glows, generic terminal cards, and purple gradients. We use a light technical workbench with one signal-orange action color. -- **Existing anchors:** `config.toml`, monospaced values, ruler ticks, brackets, and the physical safety colors of calibrated tools. -- **Language:** Spanish and English share equal status. Controls must survive Spanish strings without truncation. +- **Already known:** the user deliberately opened Context Switch. The screen does not repeat what Codex, TOML, local files, or context windows are. +- **Must be visible:** the selected amount, the currently applied amount once the selection moves, the supported range, and the resource tradeoff. +- **Must be possible:** apply the selection; restore the exact setup that existed before the app first changed it. +- **Progressive disclosure:** automatic compaction stays at 90% unless the user opens Advanced. +- **Implementation details:** file paths, managed keys, conflict strategy, IPC, and privacy guarantees belong in documentation and errors, never in default-state UI. ## 1. Signature -- **The context rail** is the one memorable element: a live scale that maps configured context, compaction point, headroom, and the 1.05M model ceiling geometrically. -- Only the rail and primary action spend signal orange. Everything else stays quiet. +The current value is a thin stationary notch on the same scale as the selected value. While both values match, the notch disappears beneath the thumb. Moving the slider reveals the difference without a legend or status card. ## 2. Typography -- **Display/UI:** Public Sans (bundled variable font) — a public-service typeface fits a transparent utility and remains highly legible at control sizes. -- **Mono:** Cascadia Mono / SFMono / ui-monospace — reserved for real paths, token values, and TOML. -- Weights: 450, 650, 850. Fluid scale with tightened display tracking and tabular numerals. -- Anti-default: no Inter/Roboto and no fashionable serif pairing; the product speaks like an instrument, not a launch page. +- Native operating-system UI stack: Segoe UI Variable on Windows, San Francisco on macOS, and the system sans elsewhere. +- One large tabular number is the reading, not a marketing headline. +- Labels use normal sentence case. No eyebrow copy, decorative caps, or code typography in the primary view. ## 3. Color -- **Canvas:** `#F3F5F2`; **surface:** `#E8ECE7`; **ink:** `#16212A`; **muted:** `#59656F`. -- **Signal accent:** `#C93E25`; text variant `#A82F1C`; label `#FFF9F5`. Orange comes from measurement and safety tools, not the usual AI-product palette. -- **Code surface:** `#182229`; code text `#EAF0E8`. -- **Borders/controls:** `#7A897C`. **Focus:** `#0B6E91` on light, `#7FD6F2` on dark. -- **Status:** success `#2E6B56`; error `#A73434`. Color never carries state alone. -- Accent proportion stays below 10% of the screen. +- Light: canvas `#F4F5F3`, ink `#1B211D`, muted `#5D6861`, control line `#79857D`. +- Dark: canvas `#202521`, ink `#EEF1ED`, muted `#B4BCB6`, control line `#7B887F`. +- Blue is reserved for the pending slider value and focus. The applied value stays neutral. +- Success and error appear only after an action. There are no decorative gradients, glows, or terminal-black panels. -## 4. Shape & elevation +## 4. Shape and elevation -- Structural seams and rails: 0–4px; controls: 8px; true objects/inputs: 12px; floating dialog: 16px; pills only for compact state. -- The measured-tool metaphor keeps long rails square-ended while touchable objects retain controlled curvature. -- Elevation ladder: whitespace → background shift → hairline border. No ambient shadows or glass. +- Native window frame, flat canvas, one footer seam. +- Controls use a restrained 6px radius; layout surfaces are not rounded cards. +- No shadows. Hierarchy comes from position, type size, and one-pixel separators. -## 5. Space & density +## 5. Space and density -- **Philosophy:** compact instrument with one generous reading zone. Users should see state, set a value, and act without scrolling on a typical laptop. -- 4px base grid. Major rhythm uses 24/32/48px; controls use 12/16px. +- Compact utility density on a 4px grid. +- The default window is 560 × 520px and must remain useful down to 440 × 430px. +- The number and scale own the reading area; secondary controls stay below it. ## 6. Motion -- **Physics:** fast and clipped. 140ms micro / 260ms signature; `cubic-bezier(.2, 0, 0, 1)`. -- The context rail is the only orchestrated moment: its retained span tracks the input and settles once. -- Motion is transform/opacity or a directly manipulated input fill; reduced motion disables transitions. +- 130ms direct manipulation feedback only: slider thumb, current notch, button press. +- Reduced-motion preference collapses transitions. -## 7. Iconography & illustration +## 7. Iconography -- Custom 20px inline SVG set, 1.75px round stroke, derived from brackets and ruler ticks. -- No emoji, sparkles, stock illustrations, or decorative AI imagery. +- The app icon depicts one applied notch and one selected point on a scale. +- No inline icon set, illustrations, sparkles, robots, or decorative brackets. -## 8. Voice & vocabulary +## 8. Voice -- Exact, calm, candid — never promotional. -- Named nouns: **context rail**, **compaction line**, **headroom**, **previous setup**. -- Buttons name outcomes: “Apply setup”, “Restore previous setup”. Errors state what happened and the next safe action. -- Banned: unleash, supercharge, seamless, effortless, unlock, revolutionize and translations. +- Short, literal labels: Context window, Advanced, Apply, Restore original. +- One decision sentence is allowed: more context retains more of the task and uses more resources. +- Default state does not narrate safety, locality, implementation, or readiness. +- Errors say what the user can infer or do next; raw system and IPC messages never reach the interface. -## 9. The weird budget +## 9. Quality floor -- One strange detail: the model ceiling is a physical stop at the right edge of the rail, with the 50K reserve beyond the recommended 1M visually present. +- WCAG AA text, at least 3:1 non-text contrast, visible keyboard focus, 44px action targets, native light/dark support, and no external runtime requests. +- The renderer has no Node access. Its IPC surface is narrow and sender-validated. -## 10. Quality floor +### Contrast table (measured 2026-08-17) -- WCAG AA text, 3:1 focus/controls, visible keyboard focus, reduced motion, 44px targets, and responsive behavior from 360px. -- Hostile strings wrap; numeric values use tabular figures; no telemetry or external runtime requests. +| Pair (foreground on canvas) | Light | Dark | Required | +|---|---:|---:|---:| +| Primary text | 14.98:1 | 13.68:1 | 4.5:1 | +| Muted text | 5.31:1 | 8.02:1 | 4.5:1 | +| Blue accent | 5.66:1 | 6.96:1 | 3:1 | +| Focus | 5.48:1 | 8.22:1 | 3:1 | +| Success | 5.84:1 | 7.57:1 | 4.5:1 | +| Error | 6.01:1 | 6.43:1 | 4.5:1 | -### Contrast table (measured 2026-08-17) +## Decisions log -| Pair (fg on bg) | Ratio | Threshold | Verdict | -|---|---:|---:|---| -| `#16212A` on `#F3F5F2` | 14.90:1 | 4.5:1 | Pass | -| `#59656F` on `#F3F5F2` | 5.45:1 | 4.5:1 | Pass | -| `#FFF9F5` on `#C93E25` | 4.79:1 | 4.5:1 | Pass | -| `#A82F1C` on `#F3F5F2` | 6.20:1 | 4.5:1 | Pass | -| `#EAF0E8` on `#182229` | 13.95:1 | 4.5:1 | Pass | -| `#F39A80` on `#182229` | 7.50:1 | 4.5:1 | Pass | -| `#AADBB9` on `#182229` | 10.42:1 | 4.5:1 | Pass | -| `#AEBBB3` on `#182229` | 8.12:1 | 4.5:1 | Pass | -| `#2E6B56` on `#F3F5F2` | 5.71:1 | 4.5:1 | Pass | -| `#A73434` on `#F3F5F2` | 6.02:1 | 4.5:1 | Pass | -| `#7A897C` on `#F3F5F2` | 3.36:1 | 3:1 UI | Pass | -| `#718078` on `#182229` | 3.89:1 | 3:1 UI | Pass | -| `#0B6E91` on `#F3F5F2` | 5.24:1 | 3:1 focus | Pass | -| `#7FD6F2` on `#182229` | 9.85:1 | 3:1 focus | Pass | - -## Appendix — decisions log - -| Date | Decision | Why | Rejected alternative | +| Date | Decision | Reason | Rejected | |---|---|---|---| -| 2026-08-17 | Local zero-dependency Node app | It can safely edit the user's file without uploading it | Hosted website, which cannot access `~/.codex` | -| 2026-08-17 | Light measuring-instrument UI | Makes trust and limits visible | Dark neon developer dashboard | +| 2026-08-17 | Electron desktop app | Double-click launch and direct, local file access | Browser plus localhost server | +| 2026-08-17 | Parameter-editor screen | Matches the single job and removes explanation from the UI | Hero, presets, status pills, TOML preview, terminal styling | +| 2026-08-17 | Native system typography | Makes the utility feel at home on the operating system | Bundled brand font and launch-page typography | diff --git a/FONT-LICENSE.txt b/FONT-LICENSE.txt deleted file mode 100644 index a6cb63a..0000000 --- a/FONT-LICENSE.txt +++ /dev/null @@ -1,93 +0,0 @@ -Copyright 2015 The Public Sans Project Authors (https://github.com/uswds/public-sans) PublicSans-Italic[wght].ttf: Copyright 2015 The Public Sans Project Authors (https://github.com/uswds/public-sans) - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/README.md b/README.md index 6443a23..e249cf1 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,25 @@ -# Codex Context Switch +# Context Switch -Tune Codex's context window from a local interface, then restore your previous setup with one click. +A small desktop control for the Codex context window. Pick an amount, apply it, or restore the setup you had before. > Community project. Not an official OpenAI product. -![Codex Context Switch interface](docs/context-switch.png) +![Context Switch desktop app](docs/context-switch.png) -## Run it +## Download -Node.js 20 or newer is the only requirement. +Open the [latest release](https://github.com/codavidgarcia/codex-context-switch/releases/latest) and choose: -```bash -npx --yes github:codavidgarcia/codex-context-switch -``` - -The command starts a server bound only to `127.0.0.1` and opens the interface. Choose a preset or enter any supported value, then select **Apply setup**. To undo it, select **Restore previous setup**. +- **Windows portable:** download the portable `.exe` and double-click it. Nothing is installed. +- **Windows setup:** download the setup `.exe` for desktop and Start menu shortcuts. +- **macOS:** download the `.dmg`. +- **Linux:** download the `.AppImage` or `.deb`. -Spanish is available from the `ES` switch in the header. +The builds are not code-signed yet, so the operating system may ask you to confirm that you trust the app. ## What it changes -The app manages these top-level keys in `~/.codex/config.toml` (or `$CODEX_HOME/config.toml`): +Context Switch manages these top-level settings in `~/.codex/config.toml` (or `$CODEX_HOME/config.toml`): ```toml model = "gpt-5.6-sol" @@ -28,46 +27,39 @@ model_context_window = 1000000 model_auto_compact_token_limit = 900000 ``` -You can customize the context window up to GPT-5.6 Sol's 1,050,000-token model limit and place the compaction line anywhere below it. The one-million / 900K setup is the starting recommendation shown in the interface. +The context window can be customized from 16,000 through GPT-5.6 Sol's 1,050,000-token model limit. Compaction defaults to 90% of the selected value and can be changed under **Advanced**. -After applying or restoring settings, restart Codex and begin a new task. +Restart Codex and begin a new task after applying or restoring a setup. ## Reversibility and safety -- The app remembers the exact managed lines that existed before the first apply. -- Undo restores only those three keys; unrelated edits, comments, and TOML sections stay intact. -- If any managed line changes outside the app, it reports a conflict and refuses to overwrite the file. -- Writes use a same-directory replacement file so a failed write can put the original back. -- State-changing requests require a same-origin token. The server accepts connections only from localhost. -- There is no telemetry, analytics, remote API, or runtime dependency. - -The local restore state lives beside the Codex config as `context-switch-state.json` and is removed after a successful restore. - -## Why a local app? +- The first apply stores the exact managed lines that existed before the change. +- Restore changes only those three keys; unrelated settings, comments, sections, and line endings remain intact. +- If a managed setting changes outside the app, Context Switch refuses to overwrite it. +- Runtime assets are bundled. The app has no telemetry, analytics, or network dependency. +- The renderer is sandboxed, has no Node.js access, and can request only status, apply, and restore operations through its preload bridge. -A hosted website cannot safely edit `~/.codex/config.toml`. Context Switch is a local web interface: the browser supplies the UI, while a small zero-dependency Node process performs the file operation on the same machine. - -## Official references - -- [GPT-5.6 Sol model page](https://developers.openai.com/api/docs/models/gpt-5.6-sol) — documents the 1,050,000-token context window. -- [Codex configuration reference](https://learn.chatgpt.com/docs/config-file/config-reference) — documents `model`, `model_context_window`, and `model_auto_compact_token_limit`. +Restore state lives beside the Codex config as `context-switch-state.json` and is removed after a successful restore. ## Develop +Requires Node.js 22.12 or newer. + ```bash git clone https://github.com/codavidgarcia/codex-context-switch.git cd codex-context-switch -npm test +npm install +npm run check npm start ``` -Useful options: +Build packages for the current operating system with `npm run dist`. On Windows, `npm run dist:win` produces both the installer and portable executable. -```text ---no-open Keep the browser closed ---port Use a specific localhost port ---config Use another config.toml path for testing -``` +## References + +- [GPT-5.6 Sol model page](https://developers.openai.com/api/docs/models/gpt-5.6-sol) +- [Codex configuration reference](https://learn.chatgpt.com/docs/config-file/config-reference) +- [Electron security checklist](https://www.electronjs.org/docs/latest/tutorial/security) ## License diff --git a/SECURITY.md b/SECURITY.md index 8a83a5d..6de0836 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -8,16 +8,17 @@ Security fixes are applied to the latest release on the default branch. Please do not open a public issue for a vulnerability that could modify or expose local files. Use GitHub's private vulnerability reporting for this repository. -Include the operating system, Node.js version, reproduction steps, and the smallest safe example config that demonstrates the issue. Do not include tokens, credentials, or a real `config.toml`. +Include the operating system, app version, reproduction steps, and the smallest safe example config that demonstrates the issue. Do not include tokens, credentials, or a real `config.toml`. ## Security boundaries Codex Context Switch: -- binds to `127.0.0.1`, not all network interfaces; -- serves a fixed allowlist of bundled files; -- requires a per-process request token and same-origin header for writes; -- accepts only small JSON request bodies; +- loads only a fixed allowlist of bundled assets through a private protocol; +- uses a sandboxed renderer with context isolation and no Node.js integration; +- exposes only status, apply, and restore through a narrow preload bridge; +- validates the renderer origin before handling every request; +- denies permissions, navigation, and new windows; - manages only three top-level Codex keys; - detects conflicting external changes before apply or restore; - makes no outbound network requests at runtime. diff --git a/build/icon.svg b/build/icon.svg new file mode 100644 index 0000000..67c8da7 --- /dev/null +++ b/build/icon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/docs/context-switch.png b/docs/context-switch.png index 344611d908cdf12b2ff4ccb2ebd58d94d9a9de94..5d6d30ff20f0a2b6a8acf771aa4321818d518fb0 100644 GIT binary patch literal 17043 zcmd74byQnlyDl0^3#Ak&P`p5aV#VE|f|Q~y8l2)@+ygCcr9g4_774}O-90H9JV0=A6$f&-=V9LS0pX;1TsB002Os_)hjC0C4X) z0D!gn@E+!$KlSnb0KgM~qU>u;uZ+DV0s~F0uKwfvuXvBh&1@rw)PugTvuk`TE&u&G zJ!RY0!D+rq+J;-V`B(XzcAfriQJwx9a1u~&K1s@^knD$U+Um5)D*n@_Dc?eOast2N z?YeF~c(xV80DnGlczvuP;CayMdbl};gt?CSALCEkJOBXNAVvT{4gd=qp#C)w3&8fe z0|5B(+ynr4|AZF+V17sm2qd}x81M@39u6Sq{{QLAWO6$)YC|VYFR(A#^66z1GI&ny zg&OhKi^|C1@Nb3L%CTZ6V9+AzJ%ClOllg>HyP7t^t>HUsr|k2U z&nhZ5%l#5Wvym$kDJ!p>UtbBDj1?*sntoW^5Q60L)AZp10;$PD5U{}--wOQM@RA#y z+v7LjbF`21mn&YA16^Upk&`ZI!vdj%bw~zHzaDXArJZ;wesR3#c{2{A_P3TEbq^<( zUR}i3PnMLA1zsYkhxRy>>%PF-@_HZ-FRt`M^*P-KTCXoc&&z2HeWOhKxz5)yGyPzw z!F134cu?vDGE6=4V53>}Rzm))KD1+b)MMw98u{794r54+usKh2e&@TYMHy%S=~DrV z9onuKiDXL=>u&;9&wKOseAm_N3` zs&>nz$Zl67V!5+K{MRPv-Z#y+t~CcnOz2kUPibzSoQl~w{o>d@e|v^vh;rdVv%f|; z$BIxo9X5MpN9KeRdxBF>?9hxs=dEQ$18Q8eY3xaQF=by<`l0%7neB7DE!A2q(mh8S z`swMdsLJ_0Q=?nO*3aKAFWI5#5W$+pfEte~B9_y)!|fx_l#G?}JIktX7Btm$K11k+{1J0Nf!pKv zAUTts2H(&K{LV`((t?O1mytKq$ZXQBg9WIvQIfvQ(Ly72FFh4AIKiWD z@8}FY8LK9Lw~60QF8ES2dMf40?2j^380OgsMuRg7*)CD+y$m`N&@R9EaF85vh;zs&yb|pSodt*&eH2nzX z+!P8MauKgW&-D?~N8l8*>x(ZVD#~gy+&?kk0>q%NYG9EMRc<5pz3TCFwz{ zP?J?o`x7BDU&xpeOpjgf$16X_oHUWpjQSuiW7kZkE@qv{GzEVE_Qz zRx`Eo=Z`1uX^-Bb%!cttYJ>8uVu~nL61FDt!&oK)oHU9aLM~>m($jcf_o9#*P<%k3 zk2HQtPS5Myt`y|^*ZvC{Ku5<^Bu$sRS~>{@vAv@Z2hWI68bf+9iKXQWyAxNUkY3sQ zk!e$0cd3`K37O*9*`Z0ZB8%N-_K(-6uX8%D9(yv$F&w* z#*?jb!grZPB7<=;?5@Q-9FN7YCM&4}K2%zbcAb@5xB&YLRKJPv*!5<0y<{jUuYOFG z#_!-4?fqe+igH=6Nm&fm`yz`0nV0Wy+S4j)v;R~5VE zwz>r8N?2aHP!tcj5zjBsH?XdC3{lx=SaEVZj?NS{RUbrD1Q<=8hT?VmMAH;s4jZ?g zEm6>q@oGN&Pz5USS5vf5%~d>${thE~T8jU(WGYx58IkjPekC%#1)G2ZtPooQy%R>v zjjMEG$II^qho|u(SsZ5JJ47;~c8Tl_U=*46$7VK>q9kJIT|X;h17=*o#Z`7XJXjjKMN%yu&J>W(#lY?G34oS90MMjMlfM%xIsXsLeynzQ|S zf|Zu_ra1N?n0>CLD5t8a%0%VcWE~soCs;_1MthH~6fEp$Xu(G2?^emkT3=99EDYhX zRkuDLTbx??y}jIomHVZTSu7??3IJ$-EN#aq@!hGciQ%P(^1zn61tI} z(0*5ZMHHA@xHPC*{yhP8eXTRAiBI(YvG1^%uR`yGOTMi;JF6H_i=&@IY)NYcd`LX9 z+2#g)FF3oAtfFqH?p>0=>MliN$!cE2e1=rtf>UI8)B(eLh&?9}4LFAODWyRZYjsGb z5H5fs`f!YKSiibbH+cE%53K0L<461DQHpIM4jHPH9^}xo7SkbX2lZEN( z8vZKtyddnYGWiBosgF_epM@6)Qg6A!PI3RA?R-uOW_Ieo`*lfwDm|m8disoiBTILI z{j*$X-bu$#eT~rI`vc6WIfp=v437K~;o<^8Ue4F_&pG51k$sU_D9V^$Y+-&_02=zN zB7;Vx@u@bIc|c#vVC)EJC1C9hdbmW^LK~$dRz&AaG-`Y_UX%L;Ss~L}(y{dTM0j8D z!R`T2)H6?YqxI}2EQApidrEG_>BYvElQ+X-+jZan)nI7if~&S8Ct-N1D8rPRrsGf? zmsU4iQbMY&Gs9zJ@aMxa?jM`2Vh_JISZ^Zxk$y|wjEKmVJatv^F%#gK%%L(o6wy zl)$P+$H6lWOSqftrw=$<#a)w(rj@X~`n{@Sy;$dvE=p9Q zqj8=Exaq3JBo)0681dKIC67A7iJ7>YwiyvmX0comSNex7rx$JhD7`2WPY`OSn5XS( zErh~&vDUZV`VnwTwefO!wL5HhYN*?~>Z!Eb_5_Vn3-V-0M^?k_;F(wdzUQI`qMSOW z@ATyW7jlp_n^SdMomc>sk|I-d})Bt!k8y5k4pRRv|jCg zuG}JVX1Fn3lXBgXl>WT(3K3T^`zuW&+rO^-=g)UnX`CpyG;*eVy+6c&WUWy-ZiDfB zf8jEeCR9f!bA)GrV!06kZl*&oFkx3vZyz2WdMh^q44d305$8cTgdpc;qUHDbH z$)%r9odOmbUE%UNueH+|-H2Vt-YY3xg6>+6GIxliuR3b3yLpHXCvt<}e4B4VgM$qM z(C)21=lmPgwzjsx6q*&50(*FXGVWI$1HzT8cej_Y+l!)(j#pu^Pai~cR^Q(CkYeK+ z&9?cIqB8Db->YbphaKldJ;r&P&vbX5n@Y;6{P58u5~BqC>0-6)T&O|%_2xIT{%_uN z-W#J#^jSh2oSbEo{F6pdu%Vfmnc6d%IAitaW9enOlII%<_0iPK`lT(|@3++NZqXId z(Ws4t(HP6<-C6rkDXdqmmIRb@+{ZoZv9XG(Nw{^~N>9kJm|}J5uNU%l44fOS#k~PE z&LIb0o6h6RI=k7oZVTo0vm$5S<9^W=oB|0c33YjcXhP{6qH4Iw^RUwU)RHLwm(i%@A5y>{yKjMUGJDrW%30{6 z?)KIl7SG8~o2P+sxJ#~d=>pahuab>z_v3DNX4I;Tb&{TQ_s3Ndg9%`*zV*%8x5w=? zm;EvY14fR?*+X+aA}M7Y4b*=}CGmOJG_Rrw zIE+BOdUWoG%Tk*}moJ!^-FFsyO_hOcFt7EPyUSjRb9^(Wt|d=nkaxrBXDUMpk3BDE zq{~}JuzPsfbJd1xZUoYc&|IPShcBzl>0v-r_GX$LSdm(6%7ScE(-L(U0Mk81rIE6h z1fL6r4JIf=U)7!(8));(v%;#7(`p7;$%Q^bT8DUm4EC~41OM~c>7v5Hp!bI~T7LRL zaUq7byV-)&G2NfNe>9n{_t_9h{`NdvMtwOs$E645G{0e0;tn(W44g3V8|;q|0)fUZ_CI{UZZh`y^>&pl`8T51@b2)g&AO(# zzwo+Pg+|c&yXzNyUEMQy`;EnPk;-`@j#xk=c@?><#YW;e+zN_#_6OPvd8K&>7PO-CZ}r+pfWXkon)0-jF!9Oq#BA zl!7B^h~bO2n!pdpsgq;_qkC1inVyhxeV$>Ju+^%KNGg6=k2j)^>HUYTk+X!@7L_Tf ziHXNIr(>tdi9vbLX^DYeMnQl6WDASubL%(C2^MyS(#6`^TC$NI!{YbOix1jKt}?-#i?~E|oM{Kp_BIAl(Lbg+Wp-_+ z2hDWgd_QEOPBd=xSht0Ssr{b%HABh2R+L-FvtxkenvAES!M7`TXy|=zJZG;taEn*n zav|CH;A$<3M^c$>c+~&;LX7ATWaBwkYa$~{Zay}foUafIN=am2Okkc*D%a2C;Hz>1 zRzMes;=GwO`b`Ca1)z&LEB@RNUm(4|+r|+weAU#{ROGhEMgdm!B60JV>rTK?N9UzT z+o9uIGtX1u+;8X#>rIsby);s+YuVmn(4&+Yko$Sni&CS<|U*L#y=^a)p&%OaOV zYGxR{w2Rj;M2#lX4|*WQT>(DCxCb;Mg(0XJM}p3CI5hvOQyXzioSdt3WfT~H4i`Kd z3N&uU|LuQ$>Fv4@|FxoB+WVxS`xWrp<<5eRV94+kQdVo$ktb<&nk)O(Yd}sUV$o4N za}1^T@AaY$!FYySdFI&LrK@9C_$Vv^R#rdveKXm0hsXbN$#eO|B3x{1x-}!r69M6> z1A8lwn~wD_RW0!Z#Om0g_UmCof-aP7L^0j9bsFxq^Sr4dgiHhZJ6&CGRzsZHkbM?R z=Iw3%63va~{mjYCJCpeq-rmhEsW%Hw?XGl`Pbi-do8nWJul?h>0wo+yIr)L0!H*-R zIh+%hO|~CBS)#J&2^+1u;`>h^h!Km`*>Nqcl|Pj(-ha4Tp4;&jt7f^-Ems%si+iLB zj(M7kA*Tns@|;2_Tmw?fG{Wtv-0CcthA0#9NZH z3>6i}N&dY3r3N*v!83-XAF>56zR}A#AB6>VNrb7ez`s=0%vv|$9S-o%H2Nz$lII@> z9*wo3`!r-42PO}ecxv0!ThmG|?*r&+MgyIJ_L)Dy{E4Z-p2`ZtwzjltUlQeJ3zL|9 zl9?;qe%5Gu!H0R;-R2s2ToD+HA1Cx8SqoPzB17G)f3wSN?@y(gvC}n?&*cG^(#Nnb zF4Y4uOf5_z4U2nY-OYx!gejJ~Dzm=#07Uba9l@f8)m$U}z5PJalU+GfWvT7w2rTUrvP>KjO9%QW(0$vB*w~b;uFy zoXu5tT_c;R8!<+OR>H>@3a69uZAz;U-9JzI;ZMm;kss8a9Zf!4I`{aW_cS5sTUz>T zm_@iT78@4e=A9H*tI*^hb}?qm5Svf*?B=!C=Gi5KRmwZx^OAojm0s+ty1!18Pp;fPw3_b z&5ef_cb9SabcbUsd9>MVpZ&vY$kf-bU(H1#rv7!laUFO~7Jqp(F^<=(LbE*Du%d|u zS!y+kpN_$lFqWaT#kcQteERV}{=noM|4|CYWIjq%y*<hTeHVGUar-Ha#gJ*|bpn{* z*|JssV+QLb#k63zZOJkzKo|Y>ULUJYpLauWmrqQAs06;a}BM2a!9Kd-pE< zNKak;`|xh~dBc@#Vw6&|1j=)7sT7aGq^V_P(#JaB<|;zK%CIL8;alI}toSZGyM5he zTct^BQ&9&RXj@vDyY8fHM+7szpXdHrAbfR>lS792x_JeX06`u{Aer zPk{}h_4|Kh6iPp!Q5VfW6Qb7Fm=wOH(7T+!{UwR=xUJEzcU(@6e*M}o1EpN>UGp4$deYFeL!>;`8D9I za89B-BJ>~Sf5joM(+McyZ=L4i>A_WSqty?K&n!gQY} z6PyQ`873!{P)!XDe;O~IJb5zFj@iSIQgGAmni97MC0o?| zVPs@5RC?*eCUvlv3QLNoc@JYeiH#bn?h?oLl`Q&)9zA+gR-sk#Z`&_u^5~H{`<7&j zQ+6A6MN`S-U_OrQ1F_6&x08)QjAI1{a76LK->#2+`J&^^7ckfP8M&D(L3DRK5nH8P z-0q-$EZtJo zxxh7pF$ig)60<(NvKj2+vKnUqXrv^>-YlyVXJr=gbQ2x{aP@t42#l*pvq$t6Q}3FVrUV$WQZ(Z zmLZjWUiG9~3{=aV=&L`r{zZNVF%m0En~Jx+eZQ_e8`RWo^82p-VE?XG=DCz}-h1-< zV^|ZpZ^H`G6An^EC%x;c8vKrU0@`jK^)C~ zV;b))ZmCL#>y~Uh7WcqJ})| zN_X|p3X0Kx*|5*Qx_hbV7l9X6SLXyGvKXXwcW4L|OJCdTe=xHWk9ki`B{fiaYc6$0R}hWP7&?cz z*7tbAK$iwSP2F5G^3hl4?v+q6&KCR2YiRqOgN&?j-1!bEwYNn8oo=;k zF|@m3as4xXOids$MhPqP+4Zsoar;Giy)^2|Y_g@4edZ9)`jxhE(N2)Wd6S3cNAuCX zOoZi&|KI|~+ez^R1n4rp3x2$H47+4QZgaT0pHFqRN03Ww+KHXO4$&&(@v-faA7$ow zhxHjqig=KQ$!Q4s3}@&-6A*}_+O9Na`y&I|Z%j*WJ*cNq7b8$^D0j>;fx>=`?B#mzKMwH3#4SG7K0e$5Av~&!Go(~<5 z@HIk+iJKJYkqaX`0=8<l)| z4H+dVgB!MXLx|I&l$2c3)(Nli7|gJeBdS*f0#01$L^8n<%xaoi`^&8h7^>0Bg+Xb_ zxS6}%kUPkL#B=APrtS-oAD`8hZ1sdN43iGyTOnoyf~3#{SrmV?eSblLm^7&;nX3*b z;+cwdzhwbW+}+ftCY-Qfz5ZY6!U7cqrSgOvf1DmcidEE}T9fG+6ZCDWXcJP#91wB| zWCa+JADPAX3!a;DRc%$Sw#M9f?JADv50c-7M3IlB2@PLIbt4A5_aER>h@I_A`1*8C zSFI$3&C#a0P`ul@ide5`Ma@r97=6CAex*56xWw&FX)W&Zf@l0Z#(d*VQL)vc3|Dz` zDaV4;_nj(Vwc8BVEkPgWyvW&_Vjs0v(*yL*jm+=ttv0ka=DYgxM?!2;w{}%gx`%!J z4`xxeysPuPVRnd($;~XOEHM2Id>a3@+RaAJJLD+s8M2om*%w$u>Edc7eWvc{cmS-( zCjKPluvghn=OkztTzKzz!uSr=mu_dcECZtjuIiqRv@eo1`=id>4^G)QIo;-Z%xjO) zF#*13lZS2BW7o4k0@75{tE{92r_+^ST4hDpn2aamDW%H%Mrz%ArHukF2j{GEaSfve zTZlNHaQ8>rxcmqGFPOc=rpq4uqQc2-{&qT}*96fC+F6pAS-sF+Hpsah8cM`)a49~p z83w+f%yEZWR{am=7TbT>@XeCS0a{?-vV_GDJxCli>MHw5m`m|2lm}Mb7gff3ElbR%DYrL5Hn7plosYcg4mvRH? zp-6_cG&Vz{fk2OS3$C=6MZ=bSbCaKB((I|yn|Oz3qeojsQ7cWrNz&;l4DT=0XbSJr ztMv1BbE`pr$7CnXEXqeNF6G+S*9(p@5tEnOldY~MR(2!<*!!6JMIUzG{#`w~m4Iga zR8<3GfRUq4j(Zi;4<0-KR;wq~Rb6pc{2cfn>lWK)pW+h~h@Oe6*E!E#zRMPO-<6$> z@P{2P+zhfF1{}T4w>Y?IbR{LFsWGRQ{CreFG=6eI(lwTe-5*WmYv$(%1NjFv-3R)n zY}gKgPne3BnmzV??t+L~e`R>DB+Q=WV2HgH3UK0sk(JJ%Y@d_CEDwrT18*GA5{EZv z`nxCAk#}GqlW+B2m_4k`-`2JS0HC+AP%-zvKEvCc>IDrPld`s}J zH>T^#QxEU!3`)R}JO_Tt=W@vE)0}*T;l<3W`<|$C1pKo=4TkEP^J4{ccwA7I|+%pQwbRzvo*hc<%jSn0SiG2=E=elCRej`)w@mueg@8o7Bwz9{WPzLwKlb>YvgyYWj49?g&Aq>-1kl^5V3E#C%(R7NlV*eH!t@z3q+sCW{H|z5m~ND;Lo3m;-fEGz$zTG=DWo|a zD23S@CbuI;J@)6t{M;_~=CGXW5n%dS(82x5F1H3<*9ZWhMw8!AS|5FOX>1`;9Q6Ws zh^5L*X0O$GXc}hkuV3?G2J@`VcrG)oO@&9&Ks$dLYWJm_bQT;NpJ8ZX5wV ze$-@O1I+XB<6D<*{Jh>A9BcrWrssan!78?AOY@ALXPk;D6n3m`0(GRlkr)a%3Go3&AIbt zHoM`qiT?DzCcFn&!CykjKI7o3Yl8$|c#6z3Cx_@8|F}CctZzg6UJ{VWKvM;ZIlgIS ziGmESzQ)?}?#mwab{60Rt|oxab+;px)3wEmF%Yo-wW~%3JurH>%b$#WwQFz%r_ifuum>q}fR}1}X0@ z4?R2^Ybu^BY#^lO?)GPm4<*Ous;y2%+D-jwXQcK_Cc)U((Rmg*3G@Ixw)LzGCGKVe z`EWl&y%am$_KlGpy=&r)g~jvnWb%F9b}`?Jc%x*ROM6l-9B3zId9>X3`W?}XZ+#GD z_0^Im{jDkz&g}EzHl;U=SuX{zW$r!N?)_Bnid63m26aJ;tgOTk9pjv z7Cmb9KC11EcgzA^(P*i>D{*%dWUcrU^XRCH(WLqSfz2JlTiO85x&0H%WXu*IO0FdI z^qL;p@&YDaK2~iKIa*VSO+4TdAWx)aBiS0}bx)HPpHtMZ5x<)4+x*u_b>Aizem-;3 z!AHf_<>%oN_n2m`G{77N&68vNtL^-p_Fq;}ts(*yGvcIWm`@h32Yw)_c9b^Ssqjt= zHHQ{c@gPJPt&rd|QUD0}H{`0|AlZMRZ2XB`*n!#HpIuL;N3!cowisC3LNcp%6}|Y# zhOa1|r1>?Tz_gp(j?FOsGlfh+9$=YL`s`P_eLTSEyU-p=6=%heQ(S@dVe(?`Arblz zwUi$MzKu^<-u9J|5kyX&JW_G{I#9;*hRMvmGjH=4qmeV|Et{!%;0?!-E$p#*T$(W@ z2XXoMR=AMsxgp@@6ULXNiTef(+IV$6ue6bCvxp|Z$&GS1Wao1jB0pyT;O<14;3gMJ z66QR@CC?6-k1ab$DHVn9zDg2)p;T^tQ1A|+kHB~3_!0GfcDw*1Pt;^mPQ!zw8KOz- z*5G~V{O>3LpUIhrN5zryO1HtG!3d4yKQ3MJq_!ghy)S^nvjac8;#wECKRK=vf3mQh zpK-~-@$g*CjnGo!2-nJ_>AOfeP@-W1o`UD(&}fLHR}UQ9JiG~26fBTdDDJ` zM)ARgRiNR2*suUcUmL+@c-X0=r(?5v{307^>4WAhy}QcZV1e8}dQ|*LiOJ^r)CpB5 zySrjlATz@9niO!_1lw?Z3s-z{L5RKHc6WC`uT>n`g7)>IUaIh@k-^V&;chE;UVycL zeJwfu^?WoCGWO}Z{(+cWT7zO7o+7avO&awhyy;>adxg8+H?)aZ38^|HbPfdZ!PY83 z{|DRwz4laz8EFhQb)@~l>tCkp1b%@$*@lH##fc@jgRSQrQ#fTq82sxN@55hu;tQZg zlnnXJ&@&-teSlY)U&%P|;i|*$l6j(_scM~x4#4TNB#j=7L`!DzcgM)Q?o%0;yU2T! zvPh096{=rKXK#M|(6!~o6X>^oyaUYZunt$lqz9Y%jwv3d;^hE92ecuc{{O7rS^9Cx zKX4KteHO|x;>P!z?0rg`xjc<7fevRt12fe$sbK);-PZ%@lLs&--Np`ARym)H>fzY5 zx)+fm_!Hz;bvPOyaw8m%NMqhdOlxX}#TkyoE7S%^fc^` zIB~z@F`XA>I@!g)jjoH`bUxNC-_(*jSPRqHNG}z2WsPJ^kY;Hy$7~7kWM9z#xA*o1D=H<}be5^nsOPS054p*U_*Cd#XkQVdNZ{G-8nq!> z+K|_AV-^mf6gH12Fh?kC!9sOqgl2DC zh3*2aUg!oi8J;twQ{*(z{s$NE(L&LjgTJVV{GmRnigtGu3veJQqlsZlO!g_4YVD2e z=AoZa<7L&$KlBdC+WRs*ez7b9dN0IdR>XhkPq==Y)G>6>2IK4?8Mjn#FK{tdO zM4)Id38B&Rvgo9EMxoKVcLF5*4jh!MQ`1G{e<0!-ET1i$qz|Vtle$t2 zH>N64Ay|aM6qe+9V|fKS^$c(j7V<^hB^>&rG}9mL3uWgjLcFD$7#A+}#9u~NC-W$i z3QXmnQp?&{27SR(d?TUV7n{*;@ayWw&oZ*EZsQV+(RRBgXc)L)O_*k3=H&TYec(X@ zQSCeln@(D|MV&Ya`eM>s<|+bVj^U4DMN8@VH8Gh~?9q}l*IyTK?Ht5KhwLSg@D z2<|~Mv<~{SqGqwcxfLU3`f+S;le^F6_q9-$->W*%ZZ{BK7twuC!ysssV7CDOqTK<- zVhZ@+%{*B3WI(W}$8LoAm36$kmpQ%4;DWnM)(zQQFI5nUT+*Z;XWb-f0e|+s=WG%8 zB!;7RjCXK2SMaM8k87Sf@T4mt4o!4#uPKWOy~2aaJvv>8KZmS67pO3|ciV0hYq*Qt zb{_Mze)Zi zs^tn?3`}(i;I$a9@`E?pR(7N2o%vLkKvO30%7^D3`@6zQ=)MtRc(1OuG>bPVa#C9e z&wV~~BkM_qq(kVWM&Tpt*M9W8jIM7TZ+d?8yvekgwnyd@I1JT*^$UYH`z_~p60k)m zj7_;a9aPw2CeJE49G+Pv@=i6%^;#I$moe&=FzuMprbUcpk6UerVjzhf2azxT1*}_l zUiDa_vDc+>4f$p7yqo8z^hP!vcaG3l)-9TS+<=`As-Z%qK|!u-=fq9XmF^6J%p=nZ zifcw@)mv0~a}|1_k4Ch18vCm0zpIg;SM^Yzkf347_#O|I;-6D*xkJ zmy(D0vr1|eveje9G3od)@Vxo;X_`69HY+5CbAeoT5^i*}Xy6~hd4GLqYTA5UfeEfM z_;%}z(Qw`X0esAD$sGHt_5v>Y$1Ntj_8a7Lxy8C-=<988)YIko*ItfHvZ|3#a*@TJ zE#j|c@r&glmCD#f zOvb;$o2)~HA&=xprKI!{?0!`b+Eza6onIAUTRi7)pi+<+@UTpt9$P=3w?U|;mMx@g z?K|oJ3Pm7#&?!g`OEp6s5^k$~OHUGDR8bK;vMKYCb?4I=ld^J=rimCrWLzU}e(avk zz;Cy~lvpELBH~Ro#6H!IyTd&~!wMk<rv3DxS}sUWgLt@x@2fUWESQTkUz3IH>ow zK-0Cm9vS7bKFzsAvK6T8zBK4`VDepxYUk8&)VA@)ZRw1;s& z8RsEM+YP4;x)O2xGJ~SSm8S2S?SB>ws4qX;A$1*2P zj9&VDnppcMKb)z|+>^DFFHPe0FVc0xq8<%|{1unRC`LnmP(27_`8XwuQ^TH$Z-oy~ zkte0X^e3bZ{O=m5R=e@JX#91PqTtf0hmQJ|6WixqE;1aKM8o{!2Hz<2DU$S$e2$;9 zz{Ap+=cTR+4r;rnn=-b#NwWbfRww(3H*|DKn3!9@s zDT`8zBZ;VD_tgHf?Dr3|uI>Zi-St@OtEND3wueQQWkNY<{n!+^g*8_Rf||zwYRULF^XWH zXHXvPigS@o`_XaYqN`OM)^nq46xIT(X@0RvMAX9z3QWI>3nEKEVDAh3U_#42^-=_3 zom5|#N>ovn_Sra3m2{gYOe@h5D1F$Dtlc6nxA8I6O{d}K=ay6-W4RlBFz&=Iphl5H z;|~jNco<`G)1ozy%WR#?vQx2}@kS*?47cY?xv%mYQnKP&(29utd^Rc5J!Ru^{fm*3#lY7e49mOg zEf0Ui=Mz**i@AC!rv#`>CJ`hO6Ej>3=tv4(&dnmpzDR|sWvIi{NXpb6bLgG#MTyB1 zKXXR}n{JuLdCE9uH6EV|4QF|?FX)m!mwmUEP2a%Y)&6<3T8(Rzo8Vj1>3BO7Gs|6(&P*0V;XBocwlCb3gUv8)+EWq+e=k?g{NBRuFAGO(kVnrY7hP zlfQ~W&y91B&I5m3L%u>!OYIZ(M%d%=@}q=AiU<;Fv(w@i$L)HHqFFan`mp8n`KzKr zwo85mxVfsVhFU=fz035nbr^1Zck?z{NX?oer()q;dX2M^rvc@EINg}mN6CI!?C3{D zOThF}nUY`lG^j2`oJ!&n2Xoa9r${8xMI<7*|%W% z*?qog{!hDMas>1*9(nA(5qhKf>}6REL3s)I7YzfCYcadH$E!~h^Kbd|?n)WX{^CZ+Bf1v)Ll~G;$vrGKBt_Y{Ffe5Gk-bm^9pf_*d zpk=>!`^cz#&QYd9==#=^r+uo33Rikea4NECdGPd;`p{d_e7i@`3P1Mt8b-^to1V{V z!`kM8gNFyi#4k<|@o)E}G`VYP#i;J)G(U*^tXuoe-sZ@D;-JJpGhOlk(4pV zjCTnh=4j=X7H;c;{b;Y1CH&o^=Iu~xFA;TXX76Pdb!DSENm+hSG)HvbY2da+PsH~7 zjxmSJDF@~isFF2NW1)TtEHC*K_4z&Lwp5UP>2GTDEsHdr2FUoB`mHf^B)cC3H=*5X ze33QV=QKuyT7?3*|1LZU`LRZ79E8fqb6Ks3q1w_xjs<9MB|(CB4^t%B*+m1^Rj-j+ z<_C*B5?)_pLfw5w59{r3YHCXCX7-83+9c*v+S@Cgz)NYzGxL%O#(&&Bl|e_b-GXm~ zlgP>peh-;EqT{tZVXCHY<6$q`nqWAkC^x={e9bL4lBw}=mRKI$GoWr|z5zfug) zaoIre*VFyaMiWCH{x|9#{{M4stI%erpMQyho4?-SZ@UQ#|9_!X8q+9P+tbst;MBYy z$pPM;DvWydwm+7h=jBViQ`jBoY*OJKV7}%rDRGope1{xo2*M2u4u066qpfYpOKCZp z#RbUO|EIrUl?gu!BreU(&C9FakslZcDA(rT@CMG90cs4T5kXW!wlfoU6%Md0RoaRH z0wK5U+Q0gFEP%t0@skzE@%oONO?(db>v~Mf0cJ?HZ1o#?NA2_U%qjI2s;}Qg4>oPv*+MqG=RWr2qo{r@?cHt zkYB7dAdtM|{J}`)><+&%BMB+feLM{9ty7Ah5;S*6Hgp#f^S-$^p7(Hu8FPte+QO)% zQ+4YE!pYcw0u@)QsM6*RtE+R+4qC-EZl0!4`3yM1hs@vGTG{d(MaGMwP)5%A2D7I8 zhxF&lx#t$E0{Q!-Z`xE!o%EaU#-N1rY944b(fsHrii?sX+KGeY@Jznv}=_U+fkoq7BO1WAjJXJVU7E#l_I@rR&Gm{ZP)XPRwPbvWbpdttv zZ`}nS5R0$gEv8OeYpgatH6#S6!LV2IFf4)z{HXe-Jz02Uw#9eJJ0Q>95#kil5aNdw zcsfyXuMZ-<_4Bom#i5Z>Zx6Ygd+sOg2Hy(CxZEhr2LvepelKA2t}bC>H-0+&?UIEn5CIa$dXBju}bSBc47dkFNxz$YX^%+y! zXbh!wH5_Bu!^n!8_i)dePTjjRJr0T5EZh1*5Bvc~Um!EGMN^&7gJ-P+kj@0JyUY!I zKnBmfzSp0cOu0wR0H1H?Lw0JqC_E@1-%}Bht)Ku*kUKYn{&$GG;xtjs5M`K<#b63^ zi#(FkBr+=ML0WhWP7c8-u%iVvZ)ag)anI;)J$BLhpM(EE8KOY%f80xfX`mrL`nsr& z(e_+px(prwYCh0%Lkt-GHr7?rQJ04Sn642d(wRs_4WpKjL7q*|#Y!?_;CN!u@h%kz z42ylXGncRM>eZ|MZ?q4n#hurJ_dLCCW$wH|gCrQ-rHvmHJq83yfrI{&Q2JkeouTIr p8vwYwlcygq0{{Rxf6oXupq|3qKzWU(2lEd=QBGAB{Kn+#{{zG(vz-6{ literal 110550 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%0Aa{te?N3L2sk2{Y4$w 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 AHUIzs diff --git a/package-lock.json b/package-lock.json index b290909..f9fecbf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,19 +1,3598 @@ { "name": "codex-context-switch", - "version": "1.0.0", + "version": "2.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "codex-context-switch", + "version": "2.0.0", + "license": "MIT", + "devDependencies": { + "electron": "43.4.0", + "electron-builder": "26.15.3" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/@electron-internal/extract-zip": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@electron-internal/extract-zip/-/extract-zip-1.0.5.tgz", + "integrity": "sha512-+bqFCP98pLI0Tt0XQo1TmlXtwjWchISndDOxCkEcIuUgXWpBnLyRI+2DU+mesvnMMX6L1XDqYNA0lXNDHd/yiA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/@electron/asar": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.4.1.tgz", + "integrity": "sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^5.0.0", + "glob": "^7.1.6", + "minimatch": "^3.0.4" + }, + "bin": { + "asar": "bin/asar.js" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/@electron/asar/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@electron/asar/node_modules/brace-expansion": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", + "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@electron/asar/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@electron/fuses": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@electron/fuses/-/fuses-1.8.0.tgz", + "integrity": "sha512-zx0EIq78WlY/lBb1uXlziZmDZI4ubcCXIMJ4uGjXzZW0nS19TjSPeXPAjzzTmKQlJUZm0SbmZhPKP7tuQ1SsEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.1", + "fs-extra": "^9.0.1", + "minimist": "^1.2.5" + }, + "bin": { + "electron-fuses": "dist/bin.js" + } + }, + "node_modules/@electron/fuses/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@electron/get": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-5.1.0.tgz", + "integrity": "sha512-3kSBtG8ObcTVfXanm5vVJ6UnBLEVmVsRk1M+vGqCuMBV+XLCbJYuWQful+yIy0GQDsSlK0kHEriEHn7SPk4EnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^3.0.0", + "graceful-fs": "^4.2.11", + "progress": "^2.0.3", + "semver": "^7.6.3", + "sumchecker": "^3.0.1" + }, + "engines": { + "node": ">=22.12.0" + }, + "optionalDependencies": { + "undici": "^7.24.4" + } + }, + "node_modules/@electron/notarize": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.5.0.tgz", + "integrity": "sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.1", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@electron/notarize/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@electron/osx-sign": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-1.3.3.tgz", + "integrity": "sha512-KZ8mhXvWv2rIEgMbWZ4y33bDHyUKMXnx4M0sTyPNK/vcB81ImdeY9Ggdqy0SWbMDgmbqyQ+phgejh6V3R2QuSg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "compare-version": "^0.1.2", + "debug": "^4.3.4", + "fs-extra": "^10.0.0", + "isbinaryfile": "^4.0.8", + "minimist": "^1.2.6", + "plist": "^3.0.5" + }, + "bin": { + "electron-osx-flat": "bin/electron-osx-flat.js", + "electron-osx-sign": "bin/electron-osx-sign.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@electron/osx-sign/node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/@electron/rebuild": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-4.2.0.tgz", + "integrity": "sha512-RKL/O+jGoXJMxrx/5771y1n0xTKmFuOYGO3gMmwypBM6rsH0kou0mswwdXA2JrhIkE4xyC7v9vGk0n6NPzgOxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@malept/cross-spawn-promise": "^2.0.0", + "debug": "^4.1.1", + "node-abi": "^4.2.0", + "node-api-version": "^0.2.1", + "node-gyp": "^12.2.0", + "read-binary-file-arch": "^1.0.6" + }, + "bin": { + "electron-rebuild": "lib/cli.js" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/@electron/universal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-2.0.3.tgz", + "integrity": "sha512-Wn9sPYIVFRFl5HmwMJkARCCf7rqK/EurkfQ/rJZ14mHP3iYTjZSIOSVonEAnhWeAXwtw7zOekGRlc6yTtZ0t+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@electron/asar": "^3.3.1", + "@malept/cross-spawn-promise": "^2.0.0", + "debug": "^4.3.1", + "dir-compare": "^4.2.0", + "fs-extra": "^11.1.1", + "minimatch": "^9.0.3", + "plist": "^3.1.0" + }, + "engines": { + "node": ">=16.4" + } + }, + "node_modules/@electron/universal/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@electron/universal/node_modules/brace-expansion": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz", + "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@electron/universal/node_modules/fs-extra": { + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.4.0.tgz", + "integrity": "sha512-EQsFzMUJkCKGr1ePqlYADkIUmHW1s3ZXr5Yqy6wbGrfUCphpl2maM/kyOIRA2HpP3AaFQTZXD4ldjek+nccddA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@electron/universal/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@electron/windows-sign": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@electron/windows-sign/-/windows-sign-1.2.2.tgz", + "integrity": "sha512-dfZeox66AvdPtb2lD8OsIIQh12Tp0GNCRUDfBHIKGpbmopZto2/A8nSpYYLoedPIHpqkeblZ/k8OV0Gy7PYuyQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "peer": true, + "dependencies": { + "cross-dirname": "^0.1.0", + "debug": "^4.3.4", + "fs-extra": "^11.1.1", + "minimist": "^1.2.8", + "postject": "^1.0.0-alpha.6" + }, + "bin": { + "electron-windows-sign": "bin/electron-windows-sign.js" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@electron/windows-sign/node_modules/fs-extra": { + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.4.0.tgz", + "integrity": "sha512-EQsFzMUJkCKGr1ePqlYADkIUmHW1s3ZXr5Yqy6wbGrfUCphpl2maM/kyOIRA2HpP3AaFQTZXD4ldjek+nccddA==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@malept/cross-spawn-promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz", + "integrity": "sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/malept" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" + } + ], + "license": "Apache-2.0", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/@malept/flatpak-bundler": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", + "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.0", + "lodash": "^4.17.15", + "tmp-promise": "^3.0.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@noble/hashes": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.3.0.tgz", + "integrity": "sha512-oN+QwyX7VSHotibwubG3kpzbwKrfnyR6OOO+3Nk/53ADL7FmgHHz4TgrbaYKvvOw09u6QTx0oiH1cNCIOuN0CQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@peculiar/asn1-schema": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.9.0.tgz", + "integrity": "sha512-AKvPMOM7LfK0uFe1m7o7+veOa8xQGPqsqOrKi3QKgCElzwjGp39mbhr2g7mt/v/mXQHiIvJmDj5cJS173x8Q9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/utils": "^2.0.2", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/json-schema": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", + "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@peculiar/utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@peculiar/utils/-/utils-2.0.3.tgz", + "integrity": "sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/webcrypto": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.7.1.tgz", + "integrity": "sha512-ODOov0sGMJMf3jPonOkgGqPknTsu+DdQ7kD++gz8aI+aFMOMHFbWAA2taqXXVTdP+OTOQR/znGvSpmkeI0WTYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.7.0", + "@peculiar/json-schema": "^1.1.12", + "@peculiar/utils": "^2.0.2", + "tslib": "^2.8.1", + "webcrypto-core": "^1.9.2" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "node_modules/@types/debug": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", + "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.13.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.3.tgz", + "integrity": "sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/@types/responselike": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@xmldom/xmldom": { + "version": "0.8.14", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.14.tgz", + "integrity": "sha512-T4EDRUBVZYRldYApjEJiU0e1stYWaRAX7CuSnKzrpwdZKo53zGV8/pqfzV6FfwNl9YThD2OumQYvqtvjvgG7aQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/abbrev": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-4.0.0.tgz", + "integrity": "sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/app-builder-lib": { + "version": "26.15.3", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-26.15.3.tgz", + "integrity": "sha512-2VnyWkqsP5v5XbBhL3tD5Syx8iNPBYsoU7kY4S2fz7wg8Rj/nztWKCUzGKaFRTv0Xwf3/H058CR1Kvtd/3lRow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@electron/asar": "3.4.1", + "@electron/fuses": "^1.8.0", + "@electron/get": "^3.0.0", + "@electron/notarize": "2.5.0", + "@electron/osx-sign": "1.3.3", + "@electron/rebuild": "^4.0.4", + "@electron/universal": "2.0.3", + "@malept/flatpak-bundler": "^0.4.0", + "@noble/hashes": "^2.2.0", + "@peculiar/webcrypto": "^1.7.1", + "@types/fs-extra": "9.0.13", + "ajv": "^8.18.0", + "asn1js": "^3.0.10", + "async-exit-hook": "^2.0.1", + "builder-util": "26.15.3", + "builder-util-runtime": "9.7.0", + "chromium-pickle-js": "^0.2.0", + "ci-info": "4.3.1", + "debug": "^4.3.4", + "dotenv": "^16.4.5", + "dotenv-expand": "^11.0.6", + "ejs": "^3.1.8", + "electron-publish": "26.15.3", + "fs-extra": "^10.1.0", + "hosted-git-info": "^4.1.0", + "isbinaryfile": "^5.0.0", + "jiti": "^2.4.2", + "js-yaml": "^4.1.0", + "json5": "^2.2.3", + "lazy-val": "^1.0.5", + "minimatch": "^10.2.5", + "pkijs": "^3.4.0", + "plist": "3.1.0", + "proper-lockfile": "^4.1.2", + "resedit": "^1.7.0", + "semver": "~7.7.3", + "tar": "^7.5.7", + "temp-file": "^3.4.0", + "tiny-async-pool": "1.3.0", + "unzipper": "^0.12.3", + "which": "^5.0.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "dmg-builder": "26.15.3", + "electron-builder-squirrel-windows": "26.15.3" + } + }, + "node_modules/app-builder-lib/node_modules/@electron/get": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-3.1.0.tgz", + "integrity": "sha512-F+nKc0xW+kVbBRhFzaMgPy3KwmuNTYX1fx6+FxxoSnNgwYX6LD7AKBTWkU0MQ6IBoe7dz069CNkR673sPAgkCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "got": "^11.8.5", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, + "engines": { + "node": ">=14" + }, + "optionalDependencies": { + "global-agent": "^3.0.0" + } + }, + "node_modules/app-builder-lib/node_modules/@electron/get/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/app-builder-lib/node_modules/@electron/get/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/app-builder-lib/node_modules/ci-info": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", + "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/app-builder-lib/node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/app-builder-lib/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/app-builder-lib/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/app-builder-lib/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/asn1js": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.10.tgz", + "integrity": "sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.5", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" + }, + "node_modules/async-exit-hook": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/aws4": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", + "dev": true, + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/brace-expansion": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", + "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/builder-util": { + "version": "26.15.3", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-26.15.3.tgz", + "integrity": "sha512-q2hn7Mbo2nFNkVekPiHFx6Nfo3hURmES3tfBn+k5Pqxl2RkmP3QGqZUhH/q9Pch/4G05NRhPjDlVj1O8q4Txvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/debug": "^4.1.6", + "builder-util-runtime": "9.7.0", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.6", + "debug": "^4.3.4", + "fs-extra": "^10.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "js-yaml": "^4.1.0", + "sanitize-filename": "^1.6.3", + "source-map-support": "^0.5.19", + "stat-mode": "^1.0.0", + "temp-file": "^3.4.0", + "tiny-async-pool": "1.3.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/builder-util-runtime": { + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.7.0.tgz", + "integrity": "sha512-g/kR520giAFYkSXTzcmF3kqQq7wi8F6N6SzeDgZrqTBN+VHdmgWOyTdD1yD7AATDId/yXLvuP34CxW46/BwCdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/bytestreamjs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bytestreamjs/-/bytestreamjs-2.0.1.tgz", + "integrity": "sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/chromium-pickle-js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", + "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/compare-version": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", + "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-dirname": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cross-dirname/-/cross-dirname-0.1.0.tgz", + "integrity": "sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/dir-compare": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-4.2.0.tgz", + "integrity": "sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimatch": "^3.0.5", + "p-limit": "^3.1.0 " + } + }, + "node_modules/dir-compare/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/dir-compare/node_modules/brace-expansion": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", + "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/dir-compare/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/dmg-builder": { + "version": "26.15.3", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-26.15.3.tgz", + "integrity": "sha512-O3zJUFUYHJKgzPqioHxfxzBzlSC1eXCSr79gMSBKBP5AgjjpmrydMsMLotEg9fAJF36vdUncb+4ndRNxoPdlSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "app-builder-lib": "26.15.3", + "builder-util": "26.15.3", + "fs-extra": "^10.1.0", + "js-yaml": "^4.1.0" + } + }, + "node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dotenv-expand": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", + "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dotenv": "^16.4.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron": { + "version": "43.4.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-43.4.0.tgz", + "integrity": "sha512-3qxGF0CeQbiox5oWV1JlbWGQ1VerbmDhTFqW4sJ8h7uqTHniFYPObXJcDna0DMh32et0fFyKzz0YY8lJv3t5jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@electron-internal/extract-zip": "^1.0.1", + "@electron/get": "^5.0.0", + "@types/node": "^24.9.0" + }, + "bin": { + "electron": "cli.js", + "install-electron": "install.js" + }, + "engines": { + "node": ">= 22.12.0" + } + }, + "node_modules/electron-builder": { + "version": "26.15.3", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-26.15.3.tgz", + "integrity": "sha512-a1KM5heqS3gQCZzizXEI8RjJy3QVogULPdeSknt76uLDpBIW/HDGsMg/XgP0riP6PI9COsRvFITKKGDqA8fJxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "app-builder-lib": "26.15.3", + "builder-util": "26.15.3", + "builder-util-runtime": "9.7.0", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "dmg-builder": "26.15.3", + "fs-extra": "^10.1.0", + "lazy-val": "^1.0.5", + "simple-update-notifier": "2.0.0", + "yargs": "^17.6.2" + }, + "bin": { + "electron-builder": "cli.js", + "install-app-deps": "install-app-deps.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/electron-builder-squirrel-windows": { + "version": "26.15.3", + "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-26.15.3.tgz", + "integrity": "sha512-Jc19XPV9y9+2bAdZPkXuVNGNIEFBq9poHC61l8Kv6FdK7DRG3+Ic0rerC0DXOaeHNz8yW0fg/JnF8GQROOF5MA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "app-builder-lib": "26.15.3", + "builder-util": "26.15.3", + "electron-winstaller": "5.4.0" + } + }, + "node_modules/electron-publish": { + "version": "26.15.3", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-26.15.3.tgz", + "integrity": "sha512-g/2bn8YTavY4cuS5F+jOS7zmZbXXBV8KZ8yHKfJjFPoKtzBqrpCdNPxBd3tqdBwP7BVd0lGzf7Bk2s0KesWZ4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/fs-extra": "^9.0.11", + "aws4": "^1.13.2", + "builder-util": "26.15.3", + "builder-util-runtime": "9.7.0", + "chalk": "^4.1.2", + "form-data": "^4.0.5", + "fs-extra": "^10.1.0", + "lazy-val": "^1.0.5", + "mime": "^2.5.2" + } + }, + "node_modules/electron-winstaller": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/electron-winstaller/-/electron-winstaller-5.4.0.tgz", + "integrity": "sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@electron/asar": "^3.2.1", + "debug": "^4.1.1", + "fs-extra": "^7.0.1", + "lodash": "^4.17.21", + "temp": "^0.9.0" + }, + "engines": { + "node": ">=8.0.0" + }, + "optionalDependencies": { + "@electron/windows-sign": "^1.1.2" + } + }, + "node_modules/electron-winstaller/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/electron-winstaller/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/electron-winstaller/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/env-paths": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", + "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", + "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.5.tgz", + "integrity": "sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/filelist": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.6.tgz", + "integrity": "sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz", + "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/form-data": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.4", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", + "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/global-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isbinaryfile": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.7.tgz", + "integrity": "sha512-gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz", + "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/jake": { + "version": "10.9.4", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", + "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.6", + "filelist": "^1.0.4", + "picocolors": "^1.1.1" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jiti": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-yaml": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz", + "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/lazy-val": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", + "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.8" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-abi": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-4.33.0.tgz", + "integrity": "sha512-vLBWCKb+7LWsX+TbfzWOkw0W81m377tyx3hOweBTjO43CXZnRGS1/JPWs20fr0PgZyDXk6ROYrylsEycK8raDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.6.3" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/node-api-version": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-api-version/-/node-api-version-0.2.1.tgz", + "integrity": "sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + } + }, + "node_modules/node-gyp": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-12.4.0.tgz", + "integrity": "sha512-OMcPNvqTCFUnNaBlmdgq+lfNqY7gTiSmNRDjY3uAXRyudeKZEZxu3CLtjMQrx4zZxCX2b/mpNqTtwuCJgXhHkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "nopt": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "tar": "^7.5.4", + "tinyglobby": "^0.2.12", + "undici": "^6.25.0", + "which": "^6.0.0" + }, "bin": { - "codex-context-switch": "src/cli.js" + "node-gyp": "bin/node-gyp.js" }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/node-gyp/node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/node-gyp/node_modules/isexe": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", + "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", + "dev": true, + "license": "BlueOak-1.0.0", "engines": { "node": ">=20" } + }, + "node_modules/node-gyp/node_modules/undici": { + "version": "6.28.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.28.0.tgz", + "integrity": "sha512-LIY910g9TI13YS95lrMFrs8Rm/u/irgHeTWoKCoteeJ04CUJ92eEfj0rVn+7VKMPBpUPiUoBKfhNyLI23EE/KA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.17" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", + "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^4.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/nopt": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-9.0.0.tgz", + "integrity": "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^4.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pe-library": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/pe-library/-/pe-library-0.4.1.tgz", + "integrity": "sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jet2jet" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkijs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pkijs/-/pkijs-3.4.0.tgz", + "integrity": "sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@noble/hashes": "1.4.0", + "asn1js": "^3.0.6", + "bytestreamjs": "^2.0.1", + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.3", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/pkijs/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/plist": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", + "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xmldom/xmldom": "^0.8.8", + "base64-js": "^1.5.1", + "xmlbuilder": "^15.1.1" + }, + "engines": { + "node": ">=10.4.0" + } + }, + "node_modules/postject": { + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/postject/-/postject-1.0.0-alpha.6.tgz", + "integrity": "sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "commander": "^9.4.0" + }, + "bin": { + "postject": "dist/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/postject/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, + "node_modules/pump": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pvtsutils": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", + "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.8.1" + } + }, + "node_modules/pvutils": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.2.0.tgz", + "integrity": "sha512-BbubeCEyTuQjVMakvJQ/Sxbc93F2pwmbsxONT/ZRrwU7Ua38d8unYTwXpTVLAKJ4BDuH9IGztCjQcd/N/39Dvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-binary-file-arch": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/read-binary-file-arch/-/read-binary-file-arch-1.0.6.tgz", + "integrity": "sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "bin": { + "read-binary-file-arch": "cli.js" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resedit": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/resedit/-/resedit-1.7.2.tgz", + "integrity": "sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pe-library": "^0.4.1" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jet2jet" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/roarr": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/sanitize-filename": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.4.tgz", + "integrity": "sha512-9ZyI08PsvdQl2r/bBIGubpVdR3RR9sY6RDiWFPreA21C/EFlQhmgo20UZlNjZMMZNubusLhAQozkA0Od5J21Eg==", + "dev": true, + "license": "WTFPL OR ISC", + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "node_modules/sax": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz", + "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "type-fest": "^0.13.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/stat-mode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", + "integrity": "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sumchecker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.1.0" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar": { + "version": "7.5.22", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.22.tgz", + "integrity": "sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/temp": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", + "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "mkdirp": "^0.5.1", + "rimraf": "~2.6.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/temp-file": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", + "integrity": "sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-exit-hook": "^2.0.1", + "fs-extra": "^10.0.0" + } + }, + "node_modules/tiny-async-pool": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tiny-async-pool/-/tiny-async-pool-1.3.0.tgz", + "integrity": "sha512-01EAw5EDrcVrdgyCLgoSPvqznC0sVxDSVeiOz09FUpjh71G79VCqneOr+xvt7T1r76CF6ZZfPjHorN2+d+3mqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^5.5.0" + } + }, + "node_modules/tiny-async-pool/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tmp": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.7.tgz", + "integrity": "sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/tmp-promise": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tmp": "^0.2.0" + } + }, + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "dev": true, + "license": "WTFPL", + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/undici": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.29.0.tgz", + "integrity": "sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unzipper": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.12.5.tgz", + "integrity": "sha512-tXYOi9R57Uj/2Z25SOs5RRSzq886MBQj2gY8dPL+xl/kv6s6SvByoKfAtvfVeEuhntWDgjd2o9p2lb4TVPAz0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "bluebird": "~3.7.2", + "duplexer2": "~0.1.4", + "fs-extra": "11.3.1", + "graceful-fs": "^4.2.2", + "node-int64": "^0.4.0" + } + }, + "node_modules/unzipper/node_modules/fs-extra": { + "version": "11.3.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.1.tgz", + "integrity": "sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/utf8-byte-length": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", + "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", + "dev": true, + "license": "(WTFPL OR MIT)" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/webcrypto-core": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.9.2.tgz", + "integrity": "sha512-gsXecm82UQNlTBURJGuqOWy1Ww08S3kZUcr3aOJS02Pk0xLtkfeUAVC0u0xhgdonFme80edSJUIJyuvL/7250Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.7.0", + "@peculiar/json-schema": "^1.1.12", + "@peculiar/utils": "^2.0.2", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", + "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } } } diff --git a/package.json b/package.json index fc0c881..053ce8d 100644 --- a/package.json +++ b/package.json @@ -1,19 +1,18 @@ { "name": "codex-context-switch", - "version": "1.0.0", - "description": "A local, one-click control panel for Codex context-window settings.", + "version": "2.0.0", + "description": "A small desktop control for the Codex context window.", "type": "module", - "bin": { - "codex-context-switch": "./src/cli.js" - }, + "main": "src/main.js", "scripts": { - "start": "node src/cli.js", - "start:no-open": "node src/cli.js --no-open", + "start": "electron .", "test": "node --test", - "check": "node --check src/cli.js && node --check src/config.js && node --check public/app.js && npm test" + "check": "node --check src/main.js && node --check src/preload.cjs && node --check src/config.js && node --check public/app.js && npm test", + "dist": "electron-builder --publish never", + "dist:win": "electron-builder --win nsis portable --x64 --publish never" }, "engines": { - "node": ">=20" + "node": ">=22.12.0" }, "keywords": [ "codex", @@ -32,11 +31,52 @@ "url": "https://github.com/codavidgarcia/codex-context-switch/issues" }, "homepage": "https://github.com/codavidgarcia/codex-context-switch#readme", - "files": [ - "public", - "src", - "LICENSE", - "README.md" - ], - "preferGlobal": false + "devDependencies": { + "electron": "43.4.0", + "electron-builder": "26.15.3" + }, + "build": { + "appId": "com.codavidgarcia.codex-context-switch", + "productName": "Context Switch", + "asar": true, + "files": [ + "public/**/*", + "src/**/*", + "package.json", + "LICENSE" + ], + "directories": { + "output": "release", + "buildResources": "build" + }, + "win": { + "icon": "build/icon.svg", + "target": [ + { + "target": "nsis", + "arch": ["x64"] + }, + { + "target": "portable", + "arch": ["x64"] + } + ] + }, + "nsis": { + "oneClick": false, + "allowToChangeInstallationDirectory": true, + "createDesktopShortcut": true, + "createStartMenuShortcut": true + }, + "mac": { + "icon": "build/icon.svg", + "target": ["dmg", "zip"], + "category": "public.app-category.developer-tools" + }, + "linux": { + "icon": "build/icon.svg", + "target": ["AppImage", "deb"], + "category": "Development" + } + } } diff --git a/public/app.js b/public/app.js index 21de370..521b4f8 100644 --- a/public/app.js +++ b/public/app.js @@ -1,83 +1,47 @@ -const copy = { +const strings = { en: { - skip: 'Skip to settings', - loading: 'Reading config…', - kicker: 'GPT-5.6 SOL · LOCAL CONTROL', - title: 'Give Codex the room you choose.', - lede: 'Set the context window and compaction line. Apply once; restore the previous setup whenever you want.', + title: 'Context', contextWindow: 'Context window', - contextTokens: 'Context tokens', tokens: 'tokens', - presets: 'Context presets', - max: 'MAX', + modelMax: '1.05M max', + decisionNote: 'More context keeps more of the task available, but uses more resources.', + advanced: 'Advanced', compactAt: 'Compact history at', - compactNote: 'Leaves room for the answer and tool output.', - setNinety: 'Set 90%', - headroom: 'Headroom', - apply: 'Apply setup', - restore: 'Restore previous setup', - willWrite: 'WILL WRITE', - copy: 'Copy TOML', - copied: 'Copied', - file: 'File', - modelCeiling: 'Model ceiling', - network: 'Network', - none: 'None', - restart: 'After applying, restart Codex and begin a new task.', - localFooter: 'Runs on 127.0.0.1. No telemetry. No config contents leave this device.', - statusActive: 'Setup applied', - statusExternal: 'Settings found', - statusInactive: 'Not applied', - statusConflict: 'Config changed outside the app', - appliedToast: 'Setup applied. Restart Codex and begin a new task.', - restoredToast: 'Previous setup restored.', - copiedToast: 'TOML copied to the clipboard.', - minContext: 'Context must be at least 16,000 tokens.', - maxContext: 'GPT-5.6 Sol supports at most 1,050,000 tokens.', - compactMinimum: 'Compaction must be at least 8,000 tokens.', - compactBelow: 'Compaction must stay below the context window.', - requestFailed: 'The local operation failed. Nothing else was changed.', - conflictHelp: 'The managed lines changed outside this app. Review config.toml; the app will not overwrite them.', + useNinety: 'Use 90%', + apply: 'Apply', + applied: 'Applied', + restore: 'Restore original', + restart: 'Restart Codex.', + restored: 'Original restored. Restart Codex.', + minContext: 'Enter at least 16,000.', + maxContext: 'The maximum is 1,050,000.', + compactMinimum: 'Enter at least 8,000.', + compactBelow: 'Compaction must be below the context value.', + conflict: 'The managed settings changed outside this app. Nothing was overwritten.', + unsupported: 'The existing settings need a manual review before this app can change them.', + failed: 'The change could not be saved.', }, es: { - skip: 'Ir a la configuración', - loading: 'Leyendo configuración…', - kicker: 'GPT-5.6 SOL · CONTROL LOCAL', - title: 'Dale a Codex el espacio que tú decidas.', - lede: 'Define la ventana de contexto y la línea de compactación. Aplícala una vez; restaura la configuración anterior cuando quieras.', + title: 'Contexto', contextWindow: 'Ventana de contexto', - contextTokens: 'Tokens de contexto', tokens: 'tokens', - presets: 'Valores de contexto', - max: 'MÁX', + modelMax: 'máx. 1,05M', + decisionNote: 'Más contexto conserva más de la tarea, pero usa más recursos.', + advanced: 'Avanzado', compactAt: 'Compactar el historial en', - compactNote: 'Deja espacio para la respuesta y las herramientas.', - setNinety: 'Usar 90%', - headroom: 'Margen libre', - apply: 'Aplicar configuración', - restore: 'Restaurar configuración anterior', - willWrite: 'ESCRIBIRÁ', - copy: 'Copiar TOML', - copied: 'Copiado', - file: 'Archivo', - modelCeiling: 'Límite del modelo', - network: 'Red', - none: 'Ninguna', - restart: 'Después de aplicar, reinicia Codex y comienza una tarea nueva.', - localFooter: 'Se ejecuta en 127.0.0.1. Sin telemetría. El contenido de tu configuración no sale del equipo.', - statusActive: 'Configuración aplicada', - statusExternal: 'Configuración detectada', - statusInactive: 'Sin aplicar', - statusConflict: 'El archivo cambió fuera de la app', - appliedToast: 'Configuración aplicada. Reinicia Codex y comienza una tarea nueva.', - restoredToast: 'Configuración anterior restaurada.', - copiedToast: 'TOML copiado al portapapeles.', - minContext: 'El contexto debe tener al menos 16.000 tokens.', - maxContext: 'GPT-5.6 Sol admite como máximo 1.050.000 tokens.', - compactMinimum: 'La compactación debe ser de al menos 8.000 tokens.', - compactBelow: 'La compactación debe quedar por debajo de la ventana de contexto.', - requestFailed: 'La operación local falló. No se cambió nada más.', - conflictHelp: 'Las líneas administradas cambiaron fuera de esta app. Revisa config.toml; la app no las sobrescribirá.', + useNinety: 'Usar 90%', + apply: 'Aplicar', + applied: 'Aplicado', + restore: 'Restaurar original', + restart: 'Reinicia Codex.', + restored: 'Original restaurado. Reinicia Codex.', + minContext: 'Ingresa al menos 16.000.', + maxContext: 'El máximo es 1.050.000.', + compactMinimum: 'Ingresa al menos 8.000.', + compactBelow: 'La compactación debe ser menor que el contexto.', + conflict: 'La configuración cambió fuera de esta app. No se sobrescribió nada.', + unsupported: 'La configuración existente necesita una revisión manual antes de cambiarla desde aquí.', + failed: 'No se pudo guardar el cambio.', }, }; @@ -86,288 +50,257 @@ const elements = { contextInput: document.querySelector('#contextInput'), contextRange: document.querySelector('#contextRange'), compactInput: document.querySelector('#compactInput'), - contextProgress: document.querySelector('#contextProgress'), - compactProgress: document.querySelector('#compactProgress'), - headroomOutput: document.querySelector('#headroomOutput'), - previewContext: document.querySelector('#previewContext'), - previewCompact: document.querySelector('#previewCompact'), - configPreview: document.querySelector('#configPreview'), - configPath: document.querySelector('#configPath'), - applyButton: document.querySelector('#applyButton'), - revertButton: document.querySelector('#revertButton'), + rangeShell: document.querySelector('#rangeShell'), + currentNotch: document.querySelector('#currentNotch'), + advanced: document.querySelector('#advanced'), ratioButton: document.querySelector('#ratioButton'), - copyButton: document.querySelector('#copyButton'), - languageToggle: document.querySelector('#languageToggle'), - statusChip: document.querySelector('#statusChip'), - statusText: document.querySelector('#statusText'), + languageButton: document.querySelector('#languageButton'), + applyButton: document.querySelector('#applyButton'), + applyLabel: document.querySelector('#applyButton span'), + restoreButton: document.querySelector('#restoreButton'), formMessage: document.querySelector('#formMessage'), - toast: document.querySelector('#toast'), - presets: [...document.querySelectorAll('[data-context]')], + result: document.querySelector('#result'), }; const state = { - language: localStorage.getItem('context-switch-language') - ?? (navigator.language.toLowerCase().startsWith('es') ? 'es' : 'en'), - token: null, + language: localStorage.getItem('context-switch-language'), status: null, + committedContext: null, + committedCompact: null, compactWasEdited: false, busy: false, - toastTimer: null, + ready: false, }; function t(key) { - return copy[state.language][key] ?? copy.en[key] ?? key; + return strings[state.language]?.[key] ?? strings.en[key] ?? key; +} + +function parseNumber(value) { + const digits = String(value).replace(/[^0-9]/g, ''); + return digits ? Number(digits) : Number.NaN; } function formatNumber(value) { + if (!Number.isSafeInteger(value)) return ''; return new Intl.NumberFormat(state.language === 'es' ? 'es-CO' : 'en-US').format(value); } -function translate() { +function setInputNumber(input, value) { + input.value = formatNumber(value); +} + +function setLanguage(language) { + const visibleContext = parseNumber(elements.contextInput.value); + const visibleCompact = parseNumber(elements.compactInput.value); + state.language = language === 'es' ? 'es' : 'en'; + localStorage.setItem('context-switch-language', state.language); document.documentElement.lang = state.language; document.querySelectorAll('[data-i18n]').forEach((node) => { node.textContent = t(node.dataset.i18n); }); - document.querySelectorAll('[data-i18n-aria]').forEach((node) => { - node.setAttribute('aria-label', t(node.dataset.i18nAria)); - }); - elements.languageToggle.textContent = state.language === 'en' ? 'ES' : 'EN'; - elements.languageToggle.setAttribute( + elements.contextRange.setAttribute('aria-label', t('contextWindow')); + elements.languageButton.textContent = state.language === 'en' ? 'ES' : 'EN'; + elements.languageButton.setAttribute( 'aria-label', state.language === 'en' ? 'Cambiar idioma a español' : 'Switch language to English', ); - renderStatus(); - renderValues(); + if (Number.isSafeInteger(visibleContext)) setInputNumber(elements.contextInput, visibleContext); + if (Number.isSafeInteger(visibleCompact)) setInputNumber(elements.compactInput, visibleCompact); + render(); } -function numericValues() { +function values() { return { - contextWindow: elements.contextInput.valueAsNumber, - compactLimit: elements.compactInput.valueAsNumber, + contextWindow: parseNumber(elements.contextInput.value), + compactLimit: parseNumber(elements.compactInput.value), }; } -function validate() { - const { contextWindow, compactLimit } = numericValues(); - let message = state.status?.hasConflict ? t('conflictHelp') : ''; - if (!message && (!Number.isSafeInteger(contextWindow) || contextWindow < 16_000)) message = t('minContext'); - else if (!message && contextWindow > 1_050_000) message = t('maxContext'); - else if (!message && (!Number.isSafeInteger(compactLimit) || compactLimit < 8_000)) message = t('compactMinimum'); - else if (!message && compactLimit >= contextWindow) message = t('compactBelow'); +function validationMessage() { + const current = values(); + if (state.status?.hasConflict) return t('conflict'); + if (!Number.isSafeInteger(current.contextWindow) || current.contextWindow < 16_000) return t('minContext'); + if (current.contextWindow > 1_050_000) return t('maxContext'); + if (!Number.isSafeInteger(current.compactLimit) || current.compactLimit < 8_000) return t('compactMinimum'); + if (current.compactLimit >= current.contextWindow) return t('compactBelow'); + return ''; +} - elements.formMessage.hidden = !message; - elements.formMessage.textContent = message; - elements.applyButton.disabled = Boolean(message) || state.busy || !state.token; - return !message; +function isDirty() { + if (!state.ready) return false; + const current = values(); + if (!state.status?.active) return true; + return current.contextWindow !== state.committedContext || current.compactLimit !== state.committedCompact; } -function renderValues() { - const { contextWindow, compactLimit } = numericValues(); - const safeContext = Number.isFinite(contextWindow) ? Math.max(0, contextWindow) : 0; - const safeCompact = Number.isFinite(compactLimit) ? Math.max(0, compactLimit) : 0; - const headroom = Math.max(0, safeContext - safeCompact); - const percentage = safeContext > 0 ? Math.round((headroom / safeContext) * 100) : 0; +function updateCurrentNotch() { + if (!Number.isSafeInteger(state.committedContext)) { + elements.currentNotch.hidden = true; + return; + } + const minimum = 16_000; + const maximum = 1_050_000; + const percentage = ((state.committedContext - minimum) / (maximum - minimum)) * 100; + elements.rangeShell.style.setProperty('--current-position', `${Math.max(0, Math.min(100, percentage))}%`); + elements.currentNotch.hidden = false; +} - elements.contextRange.value = String(Math.min(1_050_000, safeContext)); - elements.contextProgress.value = safeContext; - elements.compactProgress.value = Math.min(safeCompact, safeContext); - elements.previewContext.textContent = Number.isFinite(contextWindow) ? String(contextWindow) : '—'; - elements.previewCompact.textContent = Number.isFinite(compactLimit) ? String(compactLimit) : '—'; - elements.headroomOutput.textContent = `${formatNumber(headroom)} · ${percentage}%`; - elements.compactInput.max = String(Math.max(8_000, safeContext - 1_000)); - elements.presets.forEach((button) => { - button.setAttribute('aria-pressed', String(Number(button.dataset.context) === contextWindow)); - }); - validate(); +function render() { + const message = validationMessage(); + const dirty = isDirty(); + elements.formMessage.hidden = !message; + elements.formMessage.textContent = message; + elements.applyButton.disabled = !state.ready || state.busy || Boolean(message) || !dirty; + elements.applyLabel.textContent = dirty ? t('apply') : t('applied'); + elements.restoreButton.hidden = !state.status?.canRevert; + elements.restoreButton.disabled = state.busy; + updateCurrentNotch(); } -function renderStatus() { - if (!state.status) return; - const status = state.status; - let key = 'statusInactive'; - let chipState = 'inactive'; - if (status.hasConflict) { - key = 'statusConflict'; - chipState = 'conflict'; - } else if (status.canRevert) { - key = 'statusActive'; - chipState = 'active'; - } else if (status.active) { - key = 'statusExternal'; - chipState = 'active'; - } - elements.statusChip.dataset.state = chipState; - elements.statusText.textContent = t(key); - elements.revertButton.disabled = !status.canRevert || state.busy; - elements.configPath.textContent = status.configPath; - if (status.hasConflict) { - elements.formMessage.hidden = false; - elements.formMessage.textContent = t('conflictHelp'); - elements.applyButton.disabled = true; +function syncContext(value) { + setInputNumber(elements.contextInput, value); + elements.contextRange.value = String(value); + if (!state.compactWasEdited) { + setInputNumber(elements.compactInput, Math.floor(value * 0.9 / 1000) * 1000); } + elements.result.textContent = ''; + render(); } function setBusy(busy) { state.busy = busy; elements.contextInput.disabled = busy; - elements.compactInput.disabled = busy; elements.contextRange.disabled = busy; + elements.compactInput.disabled = busy; elements.ratioButton.disabled = busy; - elements.presets.forEach((button) => { button.disabled = busy; }); - renderStatus(); - validate(); + render(); } -function showToast(message) { - clearTimeout(state.toastTimer); - elements.toast.textContent = message; - elements.toast.hidden = false; - state.toastTimer = setTimeout(() => { - elements.toast.hidden = true; - }, 3600); +async function loadStatus() { + const status = await window.contextSwitch.getStatus(); + state.status = status; + if (!state.language) setLanguage(status.locale?.toLowerCase().startsWith('es') ? 'es' : 'en'); + const contextWindow = status.active + ? status.values.model_context_window + : status.recommended.contextWindow; + const compactLimit = status.active + ? status.values.model_auto_compact_token_limit + : status.recommended.compactLimit; + state.committedContext = status.active ? contextWindow : null; + state.committedCompact = status.active ? compactLimit : null; + setInputNumber(elements.contextInput, contextWindow); + elements.contextRange.value = String(contextWindow); + setInputNumber(elements.compactInput, compactLimit); + state.ready = true; + render(); } -async function getStatus() { - const response = await fetch('/api/status', { headers: { Accept: 'application/json' } }); - const payload = await response.json(); - if (!response.ok) throw new Error(payload.error ?? t('requestFailed')); - state.token = response.headers.get('x-context-switch-token'); - state.status = payload; - - const values = payload.values; - if (payload.active) { - elements.contextInput.value = String(values.model_context_window); - elements.compactInput.value = String(values.model_auto_compact_token_limit); - } else { - elements.contextInput.value = String(payload.recommended.contextWindow); - elements.compactInput.value = String(payload.recommended.compactLimit); +function friendlyError(error) { + if (error?.code === 'CONFIG_CHANGED') return t('conflict'); + if (['DUPLICATE_KEY', 'UNSUPPORTED_KEY_FORMAT', 'UNSUPPORTED_VALUE'].includes(error?.code)) { + return t('unsupported'); } - renderValues(); - renderStatus(); -} - -async function post(path, body = {}) { - const response = await fetch(path, { - method: 'POST', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json', - 'X-Context-Switch-Token': state.token, - }, - body: JSON.stringify(body), - }); - const payload = await response.json(); - if (!response.ok) { - const error = new Error(payload.error ?? t('requestFailed')); - error.code = payload.code; - throw error; - } - const nextToken = response.headers.get('x-context-switch-token'); - if (nextToken) state.token = nextToken; - return payload; + return t('failed'); } elements.contextInput.addEventListener('input', () => { - const context = elements.contextInput.valueAsNumber; - if (!state.compactWasEdited && Number.isFinite(context)) { - elements.compactInput.value = String(Math.floor(context * 0.9 / 1000) * 1000); + const contextWindow = parseNumber(elements.contextInput.value); + if (Number.isSafeInteger(contextWindow)) { + if (contextWindow >= 16_000 && contextWindow <= 1_050_000) { + elements.contextRange.value = String(contextWindow); + } + if (!state.compactWasEdited) { + setInputNumber(elements.compactInput, Math.floor(contextWindow * 0.9 / 1000) * 1000); + } } - renderValues(); + elements.result.textContent = ''; + render(); }); -elements.contextRange.addEventListener('input', () => { - elements.contextInput.value = elements.contextRange.value; - if (!state.compactWasEdited) { - elements.compactInput.value = String(Math.floor(elements.contextRange.valueAsNumber * 0.9 / 1000) * 1000); - } - renderValues(); +elements.contextInput.addEventListener('focus', () => { + const value = parseNumber(elements.contextInput.value); + if (Number.isSafeInteger(value)) elements.contextInput.value = String(value); }); +elements.contextInput.addEventListener('blur', () => { + const value = parseNumber(elements.contextInput.value); + if (Number.isSafeInteger(value)) setInputNumber(elements.contextInput, value); +}); + +elements.contextRange.addEventListener('input', () => syncContext(elements.contextRange.valueAsNumber)); + elements.compactInput.addEventListener('input', () => { state.compactWasEdited = true; - renderValues(); + elements.result.textContent = ''; + render(); }); -elements.presets.forEach((button) => { - button.addEventListener('click', () => { - const context = Number(button.dataset.context); - elements.contextInput.value = String(context); - elements.compactInput.value = String(Math.floor(context * 0.9 / 1000) * 1000); - state.compactWasEdited = false; - renderValues(); - }); +elements.compactInput.addEventListener('focus', () => { + const value = parseNumber(elements.compactInput.value); + if (Number.isSafeInteger(value)) elements.compactInput.value = String(value); +}); + +elements.compactInput.addEventListener('blur', () => { + const value = parseNumber(elements.compactInput.value); + if (Number.isSafeInteger(value)) setInputNumber(elements.compactInput, value); }); elements.ratioButton.addEventListener('click', () => { - const context = elements.contextInput.valueAsNumber; - if (Number.isFinite(context)) { - elements.compactInput.value = String(Math.floor(context * 0.9 / 1000) * 1000); - state.compactWasEdited = false; - renderValues(); - } + const contextWindow = parseNumber(elements.contextInput.value); + if (!Number.isFinite(contextWindow)) return; + setInputNumber(elements.compactInput, Math.floor(contextWindow * 0.9 / 1000) * 1000); + state.compactWasEdited = false; + elements.result.textContent = ''; + render(); }); elements.form.addEventListener('submit', async (event) => { event.preventDefault(); - if (!validate()) return; + if (validationMessage()) return; setBusy(true); try { - state.status = await post('/api/apply', numericValues()); - renderStatus(); - showToast(t('appliedToast')); + state.status = await window.contextSwitch.apply(values()); + state.committedContext = state.status.values.model_context_window; + state.committedCompact = state.status.values.model_auto_compact_token_limit; + elements.result.textContent = t('restart'); } catch (error) { elements.formMessage.hidden = false; - elements.formMessage.textContent = error.message; + elements.formMessage.textContent = friendlyError(error); } finally { setBusy(false); } }); -elements.revertButton.addEventListener('click', async () => { +elements.restoreButton.addEventListener('click', async () => { setBusy(true); try { - state.status = await post('/api/revert'); - const values = state.status.values; - if (state.status.active) { - elements.contextInput.value = String(values.model_context_window); - elements.compactInput.value = String(values.model_auto_compact_token_limit); - } else { - elements.contextInput.value = String(state.status.recommended.contextWindow); - elements.compactInput.value = String(state.status.recommended.compactLimit); - } + state.status = await window.contextSwitch.revert(); + const contextWindow = state.status.active + ? state.status.values.model_context_window + : state.status.recommended.contextWindow; + const compactLimit = state.status.active + ? state.status.values.model_auto_compact_token_limit + : state.status.recommended.compactLimit; + state.committedContext = state.status.active ? contextWindow : null; + state.committedCompact = state.status.active ? compactLimit : null; + setInputNumber(elements.contextInput, contextWindow); + elements.contextRange.value = String(contextWindow); + setInputNumber(elements.compactInput, compactLimit); state.compactWasEdited = false; - renderValues(); - renderStatus(); - showToast(t('restoredToast')); + elements.result.textContent = t('restored'); } catch (error) { elements.formMessage.hidden = false; - elements.formMessage.textContent = error.message; + elements.formMessage.textContent = friendlyError(error); } finally { setBusy(false); } }); -elements.copyButton.addEventListener('click', async () => { - try { - await navigator.clipboard.writeText(elements.configPreview.innerText.trim()); - showToast(t('copiedToast')); - } catch { - elements.formMessage.hidden = false; - elements.formMessage.textContent = t('requestFailed'); - } -}); - -elements.languageToggle.addEventListener('click', () => { - state.language = state.language === 'en' ? 'es' : 'en'; - localStorage.setItem('context-switch-language', state.language); - translate(); -}); +elements.languageButton.addEventListener('click', () => setLanguage(state.language === 'en' ? 'es' : 'en')); -translate(); -getStatus().catch((error) => { - elements.statusChip.dataset.state = 'conflict'; - elements.statusText.textContent = t('requestFailed'); +setLanguage(state.language ?? 'en'); +loadStatus().catch((error) => { elements.formMessage.hidden = false; - elements.formMessage.textContent = error.message; - elements.applyButton.disabled = true; + elements.formMessage.textContent = friendlyError(error); }); diff --git a/public/index.html b/public/index.html index b2e392a..6b5ee62 100644 --- a/public/index.html +++ b/public/index.html @@ -2,150 +2,64 @@ - - - - Codex Context Switch - - + + + Context Switch - - -
- - - Context Switch - -
-
- - Reading config… -
- -
+
+

Context

+
-
-
-
-

GPT-5.6 SOL · LOCAL CONTROL

-

Give Codex the room you choose.

-

Set the context window and compaction line. Apply once; restore the previous setup whenever you want.

+
+
+ +
+ + tokens
- -
- Context window -
- -
- - - - -
-
- - - -
- -
-
- -

Leaves room for the answer and tool output.

-
- - -
- -
- Headroom - 100,000 · 10% -
- - - -
- - -
- -
- -
-
-
-
File
-
~/.codex/config.toml
+
+ Advanced +
+ +
+ + tokens
-
-
Model ceiling
-
1,050,000
-
-
-
Network
-
None
-
-
- -
- -

After applying, restart Codex and begin a new task.

- - + + + + +
-