diff --git a/.agents/skills/release/SKILL.md b/.agents/skills/release/SKILL.md deleted file mode 100644 index 80300dee2..000000000 --- a/.agents/skills/release/SKILL.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -name: release -description: Cut an oxide-code release, from the release PR through the published Release and Homebrew formula. Use when asked to release, tag, ship, or cut a version. ---- - -# Cut an oxide-code Release - -Read the root `RELEASING.md` and follow its release procedure step by step. It is the source of truth for releases. These steps are the easiest to skip: - -- [Curate the section](../../../RELEASING.md#curate-the-section) before opening the release PR. -- [Tag](../../../RELEASING.md#tag) only after separate approval. -- [Verify publication](../../../RELEASING.md#verify-publication) once the Release workflow finishes. -- If the workflow opens a Homebrew formula PR, merge it as [Verify publication](../../../RELEASING.md#verify-publication) describes. -- Report the URLs of the release PR, the GitHub Release, and any formula PR. diff --git a/.claude/skills b/.claude/skills deleted file mode 120000 index 2b7a412b8..000000000 --- a/.claude/skills +++ /dev/null @@ -1 +0,0 @@ -../.agents/skills \ No newline at end of file diff --git a/.cspell/words.txt b/.cspell/words.txt index cac14c152..79ad17adb 100644 --- a/.cspell/words.txt +++ b/.cspell/words.txt @@ -1,6 +1,7 @@ acked acking acks +agentic ALPN anthropics APFS @@ -21,6 +22,7 @@ DECRC DECSC deque desync +devkit direnv disambiguable doas @@ -48,6 +50,7 @@ fsmonitor fullfsync getpgid Ghostty +GHSA GOARCH GOEXPERIMENT gsub @@ -103,6 +106,7 @@ pkgs pname popd POSIXLY +prek procs pushd pytest @@ -123,6 +127,7 @@ rustls serde serie sess +shfmt shopt SIGTTIN smol diff --git a/.github/actions/setup-nix/action.yml b/.github/actions/setup-nix/action.yml deleted file mode 100644 index 7a9596a21..000000000 --- a/.github/actions/setup-nix/action.yml +++ /dev/null @@ -1,37 +0,0 @@ -name: Set up Nix -description: Install Nix and configure the hakula Cachix substituter - -inputs: - cachix_auth_token: - description: Upload token for main and maintainer runs (omit for read-only cache access) - -runs: - using: composite - steps: - - name: Install Nix - uses: cachix/install-nix-action@v31 - with: - # `sandbox-fallback = false` fails a build that cannot get a sandbox, which Nix would - # otherwise run without one. `fallback = true` builds a path whose substitute fails to - # download, which Nix would otherwise report as a failed build. - extra_nix_config: | - fallback = true - sandbox = true - sandbox-fallback = false - - - name: Set up Cachix - id: cachix - # Also covers the action's post step, which pushes the job's builds. - continue-on-error: true - uses: cachix/cachix-action@v17 - with: - name: hakula - authToken: ${{ inputs.cachix_auth_token }} - skipPush: >- - ${{ !inputs.cachix_auth_token || - !(github.ref == 'refs/heads/main' || github.actor == 'hakula139') }} - - - name: Report Cachix failure - if: ${{ steps.cachix.outcome == 'failure' }} - shell: bash - run: echo "::warning title=Cachix unavailable::Cachix setup failed, so this job builds without the hakula cache." diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index 1d68833cd..000000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,39 +0,0 @@ -# Renovate opens version updates, so `open-pull-requests-limit: 0` leaves Dependabot only security -# updates. Each entry sets its commit type, which Dependabot would otherwise infer from recent -# commits, and its label, which drops the ecosystem label Dependabot adds by default. Only the cargo -# entry uses `fix`, since Rust advisory bumps ship in `ox` and belong under Fixed in the changelog. -version: 2 -updates: - - package-ecosystem: cargo - directory: / - schedule: - interval: weekly - open-pull-requests-limit: 0 - commit-message: - prefix: fix - include: scope - labels: - - dependencies - - package-ecosystem: npm - directory: / - schedule: - interval: weekly - open-pull-requests-limit: 0 - commit-message: - prefix: chore - include: scope - labels: - - dependencies - - package-ecosystem: github-actions - # `/` covers the workflows, and the glob adds the composite actions they share. - directories: - - / - - /.github/actions/* - schedule: - interval: weekly - open-pull-requests-limit: 0 - commit-message: - prefix: ci - include: scope - labels: - - dependencies diff --git a/.github/renovate.json b/.github/renovate.json index e6920b62b..d9b6f72e3 100644 --- a/.github/renovate.json +++ b/.github/renovate.json @@ -1,6 +1,6 @@ { "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": ["github>hakula139/nixos-config//.github/renovate-preset"], + "extends": ["github>hakula139/devkit#v2"], "packageRules": [ { "matchManagers": ["rust-toolchain"], diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3293889ac..061930e24 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,21 +27,10 @@ jobs: uses: actions/checkout@v7 - name: Set up Nix - uses: ./.github/actions/setup-nix + uses: hakula139/devkit/.github/actions/setup-nix@v2 with: cachix_auth_token: ${{ secrets.CACHIX_AUTH_TOKEN }} - - name: Format - run: nix develop .#lint -c pnpm format - - - name: Lint Markdown - if: ${{ !cancelled() }} - run: nix develop .#lint -c pnpm lint - - - name: Spell check - if: ${{ !cancelled() }} - run: nix develop .#lint -c pnpm spellcheck - - name: Check dependencies if: ${{ !cancelled() }} run: nix develop .#lint -c cargo deny --locked check @@ -173,7 +162,7 @@ jobs: uses: actions/checkout@v7 - name: Set up Nix - uses: ./.github/actions/setup-nix + uses: hakula139/devkit/.github/actions/setup-nix@v2 with: cachix_auth_token: ${{ secrets.CACHIX_AUTH_TOKEN }} @@ -195,33 +184,4 @@ jobs: actions: read steps: - name: Check results - # Unlike the default shell, `bash` sets pipefail, so a failed API call fails the gate. - shell: bash - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - GATE_ID: ${{ job.check_run_id }} - run: | - # `needs` misses a matrix leg cancelled before it starts, so read each job from the API. - failed=$( - gh api "repos/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID/jobs?filter=all&per_page=100" \ - --paginate \ - --slurp | - jq -r --argjson gate "$GATE_ID" ' - [.[].jobs[]] - | group_by(.name) - | map(max_by(.run_attempt)) as $jobs - | first($jobs[] | select(.id == $gate)) - // error("job \($gate) is missing from this workflow run") - # Jobs of a calling workflow share this run, so check only names with this prefix. - | (.name | sub("[^/]*$"; "")) as $prefix - | $jobs[] - | select(.id != $gate and (.name | startswith($prefix))) - | select(.conclusion != "success" and .conclusion != "skipped") - | "::error::\(.name): \(.conclusion // .status)" - ' - ) - - if [[ -n "$failed" ]]; then - echo "$failed" - exit 1 - fi + uses: hakula139/devkit/.github/actions/ci-result@v2 diff --git a/.github/workflows/formula.yml b/.github/workflows/formula.yml index dc89f00f6..828ca3cb8 100644 --- a/.github/workflows/formula.yml +++ b/.github/workflows/formula.yml @@ -3,7 +3,6 @@ name: Homebrew Formula on: pull_request: paths: - - .github/actions/setup-nix/** - .github/workflows/formula.yml - .github/workflows/release.yml - Formula/oxide-code.rb @@ -47,7 +46,7 @@ jobs: uses: actions/checkout@v7 - name: Set up Nix - uses: ./.github/actions/setup-nix + uses: hakula139/devkit/.github/actions/setup-nix@v2 with: cachix_auth_token: ${{ secrets.CACHIX_AUTH_TOKEN }} diff --git a/.github/workflows/nix-cache.yml b/.github/workflows/nix-cache.yml index e6782cd25..f69811827 100644 --- a/.github/workflows/nix-cache.yml +++ b/.github/workflows/nix-cache.yml @@ -43,7 +43,7 @@ jobs: ref: refs/tags/${{ inputs.tag }} - name: Set up Nix - uses: ./.github/actions/setup-nix + uses: hakula139/devkit/.github/actions/setup-nix@v2 with: cachix_auth_token: ${{ secrets.CACHIX_AUTH_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 38277bb66..4dbe29623 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -53,37 +53,7 @@ jobs: actions: read steps: - name: Wait for CI on the tagged commit - shell: bash - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - # Pull request runs test a merge commit, so only push and dispatched runs count. - while true; do - verdict=$( - gh api "repos/$GITHUB_REPOSITORY/actions/workflows/ci.yml/runs?head_sha=$GITHUB_SHA&per_page=100" \ - --paginate \ - --slurp | - jq -r '[.[].workflow_runs[] | select(.event == "push" or .event == "workflow_dispatch")] - | if any(.[]; .conclusion == "success") then - "passed \(map(select(.conclusion == "success"))[0].html_url)" - elif any(.[]; .status != "completed") then "running" - else "failed" end' - ) - case "$verdict" in - passed*) - echo "CI passed on $GITHUB_SHA: ${verdict#passed }" - exit 0 - ;; - running) - sleep 30 - ;; - *) - echo "::error::No push or dispatched CI run passed on $GITHUB_SHA." \ - "Rerun its failed jobs, or run ci.yml on $GITHUB_REF_NAME, then rerun this job." - exit 1 - ;; - esac - done + uses: hakula139/devkit/.github/actions/tagged-ci@v2 build: name: Build (${{ matrix.target }}) @@ -244,28 +214,16 @@ jobs: release-assets/*.tar.gz release-assets/*.zip - - name: Install changelog parser - uses: taiki-e/install-action@parse-changelog - - name: Publish release - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - parse-changelog CHANGELOG.md "${GITHUB_REF_NAME#v}" > release-notes.md - - options=(--verify-tag --title "$GITHUB_REF_NAME" --notes-file release-notes.md) - if [[ "$GITHUB_REF_NAME" == *-* ]]; then - options+=(--prerelease) - fi - - gh release create "$GITHUB_REF_NAME" \ - release-assets/oxide-code-x86_64-unknown-linux-gnu.tar.gz \ - release-assets/oxide-code-x86_64-unknown-linux-gnu.sha256 \ - release-assets/oxide-code-aarch64-apple-darwin.tar.gz \ - release-assets/oxide-code-aarch64-apple-darwin.sha256 \ - release-assets/oxide-code-x86_64-pc-windows-msvc.zip \ - release-assets/oxide-code-x86_64-pc-windows-msvc.sha256 \ - "${options[@]}" + uses: hakula139/devkit/.github/actions/publish-release@v2 + with: + assets: | + release-assets/oxide-code-x86_64-unknown-linux-gnu.tar.gz + release-assets/oxide-code-x86_64-unknown-linux-gnu.sha256 + release-assets/oxide-code-aarch64-apple-darwin.tar.gz + release-assets/oxide-code-aarch64-apple-darwin.sha256 + release-assets/oxide-code-x86_64-pc-windows-msvc.zip + release-assets/oxide-code-x86_64-pc-windows-msvc.sha256 formula: name: Check Homebrew Formula diff --git a/.gitignore b/.gitignore index 5adf3a481..4f53d498e 100644 --- a/.gitignore +++ b/.gitignore @@ -3,10 +3,6 @@ /mutants.out*/ /target/ -# Dependencies -.pnpm-store/ -node_modules/ - # Local environment .env.local .envrc.local diff --git a/.markdownlint-cli2.jsonc b/.markdownlint-cli2.jsonc index b71d2ca2a..956136477 100644 --- a/.markdownlint-cli2.jsonc +++ b/.markdownlint-cli2.jsonc @@ -1,18 +1,5 @@ { "config": { - "default": true, - "code-block-style": { "style": "fenced" }, - "code-fence-style": { "style": "backtick" }, - "emphasis-style": { "style": "underscore" }, - // GitHub shows a PR's title above its body, so the PR template starts at `##`. "first-line-heading": false, - "heading-style": { "style": "atx" }, - "line-length": false, - "no-duplicate-heading": { "siblings_only": true }, - "ol-prefix": { "style": "ordered" }, - "strong-style": { "style": "asterisk" }, - "ul-style": { "style": "dash" }, }, - - "gitignore": true, } diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 618d4984f..000000000 --- a/.prettierignore +++ /dev/null @@ -1,2 +0,0 @@ -licenses/*.hbs -pnpm-lock.yaml diff --git a/.prettierrc.json b/.prettierrc.json deleted file mode 100644 index cdc406f8f..000000000 --- a/.prettierrc.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "embeddedLanguageFormatting": "off", - "printWidth": 100, - "quoteProps": "consistent", - "singleQuote": true, - "trailingComma": "all" -} diff --git a/.taplo.toml b/.taplo.toml deleted file mode 100644 index ccfe63c0a..000000000 --- a/.taplo.toml +++ /dev/null @@ -1,2 +0,0 @@ -[formatting] -column_width = 100 diff --git a/AGENTS.md b/AGENTS.md index 940836a43..a4beef5a3 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -10,8 +10,6 @@ The tree lists only the top-level entries whose names leave their purpose unclea ```text . -├── .agents/ # Agent skills for the release procedure -├── .claude/ # Link to the agent skills for Claude Code ├── about.toml # Release dependency license selection ├── crates/ox/ # The `ox` binary crate with the CLI and headless frontend, mapped in docs/design/architecture.md ├── crates/ox-core/ # The `ox-core` library crate with the agent core, mapped in docs/design/architecture.md @@ -57,9 +55,7 @@ cargo clippy # Lint without test target cargo doc --no-deps # Check rustdoc lints cargo llvm-cov # Run tests and check coverage cargo deny check # Check dependencies when they change -pnpm format # Check JSON, Markdown, and YAML formatting -pnpm lint # Lint Markdown -pnpm spellcheck # Spell check +prek run --all-files # Run the shared formatting and lint hooks ``` [Development](docs/conventions/development.md#ci) lists which CI job runs each check. diff --git a/RELEASING.md b/RELEASING.md index 0d1ed9718..a983daead 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -31,47 +31,17 @@ The TUI layout, prompt text, slash-command output wording, and log format are ou Before 0.1.0, config, environment variable, and session format changes may freely break earlier setups and files, with no migration hints, legacy fallbacks, or compatibility shims. -## Changelog +## Release Preparation -[git-cliff](https://git-cliff.org) drafts each release's `CHANGELOG.md` section from `cliff.toml`, and the release PR curates the draft into the published notes. Curate a section only in its release PR after git-cliff drafts it, and never regenerate an older section. The GitHub Release keeps its own copy of the notes, so once a PR that corrects a published section merges, run the Release workflow on `main` with the tag in its `notes` input, which republishes the tag's section from `main`'s `CHANGELOG.md` and builds nothing: +Follow the [shared release procedure](https://github.com/hakula139/devkit/blob/v2/docs/releasing.md) for changelog curation, the release PR, tagging its exact merged commit after separate approval, and CI recovery. Draft `CHANGELOG.md` with the shared configuration. -```bash -gh workflow run release.yml --ref main -f notes=vX.Y.Z -``` +Security fixes describe the gap, affected releases, and published advisory as [SECURITY.md](SECURITY.md) promises. Add an advisory published later to every affected changelog section through a correction PR. -- Each squash-merged PR title becomes one draft entry. -- `feat`, `fix`, `perf`, and `revert` titles appear under Added, Fixed, Changed, and Removed, respectively. Titles with `!` appear under Breaking changes. All other types are skipped, including routine `chore(deps)` and `chore(flake)` bumps. Use `fix(deps): ...` for a bump that fixes an advisory or changes behavior in the shipped `ox`. `.github/dependabot.yml` applies this title to every Cargo security update. npm packages are development tools that never ship in `ox`, so their bumps remain `chore`, including advisory fixes. -- Within each group, the draft lists unscoped entries first, then the rest sorted by scope in merge order, so related entries sit together. Each `(#N)` links to its PR. -- A stable section includes every change since the previous stable release. A prerelease section includes only changes since the previous tag. -- `--prepend` adds one section while preserving the rest. Avoid `--output CHANGELOG.md`, which regenerates the whole file with a single tag pattern, so it drops every curated section and compare link, along with either the prerelease sections or the stable roll-ups. +1. Set `[workspace.package].version` in `Cargo.toml`, then run `cargo update --workspace`. -### Curate the Section +2. Set the `VERSION=` line in `docs/guide/install.md` to the release tag. -The draft lists PR titles, which are too short to explain each change to users. Before opening the release PR, rewrite the draft for users, reading a PR's description wherever its title leaves the effect unclear. Follow these rules: - -- For a stable section, start from the curated sections of the prereleases it rolls up and carry over every entry. The draft rebuilds entries from PR titles, so it drops the curated wording and omits PRs whose titles it skips, such as advisory bumps merged as `chore(deps)`. Then add the draft entries for changes since the last prerelease, and apply the rules below to the whole section. -- Describe what users can now do, what no longer breaks, and what now works differently, such as a check that now fails or a value that is now rejected. Omit implementation details. -- For a fix that closes a security gap, such as a permission bypass, state what the gap let through and which releases it affected, and link its published advisory after the PR links, as [SECURITY.md](SECURITY.md) promises. When the advisory is published after the release, add the link in a PR that [corrects each section](#changelog) listing the fix. -- Merge entries that describe the same user-visible change, keeping every PR link, as in `([#223](...), [#224](...))`. Fold a fix to a feature that is new in the same section into that feature's entries, and describe the feature as it now works. A merged entry takes the scope of the feature or main change it describes, and a PR with unrelated effects may be split across entries. -- Move each entry to the group that matches its effect. For example, move a `fix` that adds a capability to Added. Keep entries under Breaking changes there. -- Drop entries with no user-visible effect, such as a CI-only or test-only change titled `fix`. -- Within each group, order entries by user impact and keep their scope labels. -- Describe only what the PRs changed. -- Lead with the highlights when the release has any, and curate them like the entries. - -## Prepare a Release - -1. Branch off `main` as `chore/release-vX.Y.Z`. - -2. Set `version` under `[workspace.package]` in `Cargo.toml` to `X.Y.Z`, then refresh `Cargo.lock`: - - ```bash - cargo update --workspace - ``` - -3. Pin the install snippets to the tag by setting the `VERSION=` line in `docs/guide/install.md` to `VERSION=vX.Y.Z`. - -4. For a stable tag, add the release's two [session resume fixtures](docs/design/persistence.md#compatibility), the SQL dump and the export snapshots with their insta headers deleted by `sed` from the first line through the second `---` line. `INSTA_UPDATE=unseen` then records how the new fixtures resume, while still failing if an earlier release's fixture now resumes differently: +3. For a stable tag, add the release's two [session resume fixtures](docs/design/persistence.md#compatibility), the SQL dump and the export snapshots with their insta headers deleted by `sed` from the first line through the second `---` line. `INSTA_UPDATE=unseen` then records how the new fixtures resume, while still failing if an earlier release's fixture now resumes differently: ```bash session=crates/ox-core/src/session @@ -82,49 +52,7 @@ The draft lists PR titles, which are too short to explain each change to users. INSTA_UPDATE=unseen cargo test -p ox-core --lib session_format::resumes_from_every_release_fixture ``` -5. Inside the Nix dev shell, which provides git-cliff, prepend the changelog section. Because `cliff.toml` bounds sections at stable tags only, a prerelease adds a `--tag-pattern` that bounds its section at every tag: - - ```bash - git cliff --unreleased --tag vX.Y.Z --prepend CHANGELOG.md # Stable - git cliff --unreleased --tag vX.Y.Z --tag-pattern '^v[0-9]+\.' --prepend CHANGELOG.md # Prerelease - ``` - - For a notable release, list the highlights as Markdown bullets in `highlights.md` and add `--with-tag-message="$(..vX.Y.Z - ``` - - When the stable lookup finds no tag, as for `v0.1.0`, link `https://github.com/hakula139/oxide-code/releases/tag/vX.Y.Z` instead. - -7. [Curate the section](#curate-the-section) that git-cliff prepended. - -8. Run the [verification block](AGENTS.md#verification). Because `cspell` scans `CHANGELOG.md`, add any unknown words from the section to `.cspell/words.txt`. - -9. Commit, then open a PR titled `chore(release): vX.Y.Z`, whose title becomes the squash commit title on `main`. Record the checks in the PR's Test plan. The diff should touch only `Cargo.toml`, `Cargo.lock`, `CHANGELOG.md`, `docs/guide/install.md`, and possibly `.cspell/words.txt`, plus, for a stable tag, the two new fixtures under `crates/ox-core/src/session/fixtures/` and their snapshots. - -10. Merge after CI passes and the review is approved. If another PR merges first, recreate the branch from `main` and repeat the steps before curation, because updating the branch leaves a section that misses the new commit. Carry the curated entries over from the old branch, then curate the new ones. - -## Tag - -Pushing the tag starts the Release workflow and is hard to undo, so get approval for it separately from the release PR. Push it soon after the merge, because the pinned install snippets on `main` return 404 until the release publishes. - -Tag the release PR's squash commit by its SHA, since a later PR may already sit on top of `main`: - -```bash -git fetch origin -sha=$(gh pr view --json mergeCommit --jq .mergeCommit.oid) -git tag vX.Y.Z "$sha" && git push origin vX.Y.Z -``` - -The workflow reuses the CI run that the merge started on `main` and waits up to an hour for it to finish. It publishes nothing unless a push or dispatched CI run on that commit passed, so a tag on a commit that never ran CI on `main` needs `gh workflow run ci.yml --ref vX.Y.Z` first, and a failed run needs its failed jobs rerun. Then rerun the Release workflow's failed jobs. +4. Run the [verification block](AGENTS.md#verification), including session compatibility checks for stable releases. The release PR changes the version files, changelog, pinned install snippet, any needed spelling entries, and stable-release fixtures and snapshots. ## Verify Publication @@ -136,16 +64,9 @@ Watch the [Release workflow](https://github.com/hakula139/oxide-code/actions/wor The workflow then renders the formula from the release sidecars, installs it through a local tap on `macos-latest` and `ubuntu-latest`, and runs `brew test` there before it opens a `chore(release): refresh Homebrew formula for vX.Y.Z` PR. The same check runs on pull requests that touch the formula, its rendering script, or the release workflows. Merging that PR once its checks pass is the final release step. The formula follows the latest release, or the newest prerelease until the first stable release, so other tags skip this job. If the job fails, fix the cause and rerun it, since a rerun rebuilds the branch and reuses an open PR. -## Re-Cut an Existing Tag - -The PR-based flow tags only reviewed, CI-green commits, so re-cutting should be rare. If a release still needs to be redone (e.g., bad assets), let any in-flight release run finish first. To rebuild the same commit, delete only the release with `gh release delete vX.Y.Z --yes` and run the release workflow from the Actions tab against the tag. To release a different commit, delete the release and its tag, then move and push the tag: - -```bash -gh release delete vX.Y.Z --cleanup-tag --yes -git tag -f vX.Y.Z && git push origin vX.Y.Z -``` +## Recovery -Either way, the new run updates the open formula PR with the new checksums, or opens a new one. +Follow the shared release procedure for notes corrections and CI retries. Let an in-flight release finish before rebuilding assets. Rebuild the original commit when rebuilding the same tag. A source change requires a new version and release PR. A release workflow rerun refreshes the open formula PR or opens one with the rebuilt checksums. ## Stable Gates for 0.1.0 @@ -163,7 +84,7 @@ Before tagging `v0.1.0`: - A whole-repo review at the rc commit has no open findings. Fix each finding or file it into the milestone. - The rc serves as the daily driver for the full soak without a new bug. -The `v0.1.0` release PR also switches the install snippets to `releases/latest/download/`, then removes the `VERSION=` lines and the [Prepare a Release](#prepare-a-release) step that pins them. Because it adds the first session resume fixtures, it also drops `allow_empty_glob` from the fixture test in `crates/ox-core/src/session/handle.rs`, so the test fails again when no fixture matches. +The `v0.1.0` release PR also switches the install snippets to `releases/latest/download/`, then removes the `VERSION=` lines and the [Release Preparation](#release-preparation) step that pins them. Because it adds the first session resume fixtures, it also drops `allow_empty_glob` from the fixture test in `crates/ox-core/src/session/handle.rs`, so the test fails again when no fixture matches. ## Targets diff --git a/cliff.toml b/cliff.toml deleted file mode 100644 index a07f442ce..000000000 --- a/cliff.toml +++ /dev/null @@ -1,67 +0,0 @@ -[changelog] -header = """ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), \ -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -""" - -# Tera's `sort` rejects a null key, so unscoped entries render first in their own loop. -body = """ - -{% if version -%} - ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} -{% else -%} - ## [Unreleased] -{% endif %} -{% if message %} - ### Highlights - - {{ message | trim }} -{% endif %} -{% for group, commits in commits | group_by(attribute="group") %} - ### {{ group | split(pat="-->") | last | trim | upper_first }} - - {% for commit in commits -%} - {% if not commit.scope -%} - - {{ commit.message | upper_first | trim }} - {% endif -%} - {% endfor -%} - {% for commit in commits | filter(attribute="scope") | sort(attribute="scope") -%} - - _({{ commit.scope }})_ {{ commit.message | upper_first | trim }} - {% endfor %} -{%- endfor -%} -""" - -trim = true -postprocessors = [{ pattern = '\n{3,}', replace = "\n\n" }] - -[git] -conventional_commits = true -filter_unconventional = true -filter_commits = true -# Stable release boundaries include all changes from their prereleases. -tag_pattern = '^v[0-9]+\.[0-9]+\.[0-9]+$' -use_branch_tags = true -sort_commits = "oldest" - -commit_preprocessors = [ - # Backtick inline HTML so Markdown renders it as code. `(^|[^`])` stands in for the lookbehind - # that Rust regex lacks, so already-fenced spans stay as they are. - { pattern = '(^|[^`])(<\/?[a-zA-Z][^>]*>)', replace = '$1`$2`' }, - # GitHub autolinks `#N` in release notes but not in rendered files. - { pattern = '\(#([0-9]+)\)', replace = '([#$1](https://github.com/hakula139/oxide-code/pull/$1))' }, -] - -# `` prefixes, which the body template strips, order the sections. The first match wins, -# so the catch-all `!:` parser precedes the type prefixes. `filter_commits` drops the other types. -commit_parsers = [ - { message = '^[a-z]+(\([^)]+\))?!:', group = "Breaking changes" }, - - { message = "^feat", group = "Added" }, - { message = "^fix", group = "Fixed" }, - { message = "^perf", group = "Changed" }, - { message = "^revert", group = "Removed" }, -] diff --git a/cspell.json b/cspell.json index 8a8c19bfa..a380bfbff 100644 --- a/cspell.json +++ b/cspell.json @@ -12,5 +12,5 @@ } ], "dictionaries": ["project-words"], - "ignorePaths": ["Cargo.lock", "pnpm-lock.yaml", "**/snapshots/*.snap", "licenses/**"] + "ignorePaths": ["Cargo.lock", "**/snapshots/*.snap", "licenses/**"] } diff --git a/docs/conventions/development.md b/docs/conventions/development.md index 7697deb89..090e25ea8 100644 --- a/docs/conventions/development.md +++ b/docs/conventions/development.md @@ -4,11 +4,11 @@ Conventions for the dev shell, pre-commit hooks, toolchain, Nix and config file ## Dev Shell -The Nix flake provides the pinned Rust toolchain, `cargo-deny`, `cargo-insta`, `cargo-llvm-cov`, `cargo-mutants`, `git-cliff`, Node.js, pnpm, and the `sqlite3` shell: +The Nix flake provides the pinned Rust toolchain, `cargo-deny`, `cargo-insta`, `cargo-llvm-cov`, `cargo-mutants`, `git-cliff`, and the `sqlite3` shell: ```bash -nix develop # Dev shell with the toolchain, hooks, and Node tools -nix flake check # Run most hooks, the Home Manager module tests, and the test suite +nix develop # Dev shell with the toolchain and hooks +nix flake check # Run shared hooks, the Home Manager module tests, and the test suite nix build # Build ox from source without running the tests ``` @@ -20,7 +20,7 @@ Entering the dev shell in this repository installs a [pre-commit](https://pre-co The hook runs the compile-free subset of the [verification](../../AGENTS.md#verification) checks on staged files: file hygiene, Nix formatting and lints, ShellCheck, `rustfmt`, Prettier and Taplo formatting, `markdownlint`, and `cspell`. Hooks that fix files in place fail the commit if they make changes, so stage the fixes and commit again. Checks that compile the workspace are excluded because their build cost would gate every commit. -The Node-based hooks run tools pinned in `node_modules`, which pnpm installs before running them whenever it is missing or out of date with the lockfile. `nix flake check` leaves them out because its sandbox cannot install `node_modules`, and it leaves out `rustfmt` so that it never fetches the pinned toolchain. CI's Lint job runs the Node tools, and its Rust (Linux) job runs `cargo fmt --check`. Run `pnpm format`, `pnpm lint`, and `pnpm spellcheck` directly when changing documentation, comments, or config files. +The shared devkit hook baseline provides formatting and lint tools directly from Nix, so the sandbox checks them without installing `node_modules`. Only `rustfmt` is a development-only hook, since fetching the pinned Rust toolchain is left to CI's Rust job. Run `prek run --all-files` in the dev shell to check the whole repository. ## Toolchain @@ -61,7 +61,7 @@ The Node-based hooks run tools pinned in `node_modules`, which pnpm installs bef ## Config Style -Prettier and Taplo leave long strings alone, and no formatter covers shell code, so wrap YAML, TOML, and shell files by hand: +Prettier, Taplo, and shfmt format YAML, TOML, and shell files. Wrap comments and long strings by hand: - Wrap comments as [Writing](writing.md#comments) describes, and keep other lines within about 100 columns, counting the indent. Leave a line long when it holds an unbreakable token, such as a URL or path, or sits in a heredoc body or literal block whose line breaks are content. - Wrap a long string only where its value stays the same, and break it where [Rust](rust.md#strings) breaks a continued literal. @@ -78,14 +78,14 @@ CI runs on pushes to `main`, pull requests, and manual dispatch. The release wor | Job | Checks | | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Lint | `pnpm format`, `pnpm lint`, `pnpm spellcheck`, and `cargo deny check` in the flake's `lint` shell, which leaves out the pinned toolchain | +| Lint | `cargo deny check` in the flake's `lint` shell, which leaves out the pinned toolchain | | Rust (Linux, macOS, Windows) | `cargo fmt --check` on Linux, then `cargo clippy --all-targets`, `cargo clippy`, `cargo doc --no-deps`, and the test suite under `cargo llvm-cov`, uploaded to Codecov, then on Linux a check that every snapshot baseline has a test | | MSRV | `cargo hack check --rust-version` against `rust-version` | | Nix (Linux, macOS) | `nix flake check`, which also runs the test suite in the build sandbox, then the package build with its `ox --version` check | Branch protection requires only the CI Result job and Codecov's `codecov/patch` status. CI Result reads every attempt's jobs from the Actions API, keeps the latest attempt for each job name, and fails when any job of the CI workflow, including each matrix leg, concludes anything other than success or skipped. That catches a leg cancelled before a runner picks it up, which the `needs` results of a matrix job omit, and retains earlier failures when only the gate reruns. CI Result runs once the jobs in its `needs` finish and counts any unfinished job as a failure, so list each new job there. -The Lint and Nix jobs pull from the `hakula` Cachix cache, and runs on `main` or by the maintainer push their builds to it. The cache only saves build time, so a failed Cachix setup, download, or push does not fail a job: a failed setup logs a warning and the job builds without the cache, a failed download makes Nix build that path from source, and a failed push at the end of the job shows Cachix's error annotation on a green job. Every other failed step still fails its job and CI Result. A download that stalls without failing still runs the job into its timeout, which [#715](https://github.com/hakula139/oxide-code/issues/715) tracks. +The Lint and Nix jobs pull from the `hakula` Cachix cache and push their builds only on the default branch. The cache only saves build time, so a failed Cachix setup, download, or push does not fail a job: a failed setup logs a warning and the job builds without the cache, a failed download makes Nix build that path from source, and a failed push at the end of the job shows Cachix's error annotation on a green job. Every other failed step still fails its job and CI Result. A download that stalls without failing still runs the job into its timeout, which [#715](https://github.com/hakula139/oxide-code/issues/715) tracks. A push to a pull request cancels the CI it supersedes, while every push to `main` gets its own run, which a later push never cancels. diff --git a/docs/conventions/github.md b/docs/conventions/github.md index 7ec61371c..34fd76b0a 100644 --- a/docs/conventions/github.md +++ b/docs/conventions/github.md @@ -12,7 +12,7 @@ Conventions for commits, branches, pull requests, and issues. ## Pull Requests -- Merge into `main` only with squash merges. The squash commit uses the PR title, which becomes the PR's draft [changelog](../../RELEASING.md#changelog) entry, so write the title for users. +- Merge into `main` only with squash merges. The squash commit uses the PR title, which becomes the PR's draft [changelog](../../RELEASING.md#release-preparation) entry, so write the title for users. - Fill in `.github/pull_request_template.md`. Start the Summary with prose describing the problem and resulting behavior, then cover each part of the change in a bullet with a bold label. In the Test plan, list the checks actually run and note any verification limits. - Add `Closes #N` for each resolved issue. - Do not request a review from the PR author because GitHub rejects the request. diff --git a/docs/design/persistence.md b/docs/design/persistence.md index ae07494d6..17a2529fb 100644 --- a/docs/design/persistence.md +++ b/docs/design/persistence.md @@ -56,7 +56,7 @@ Generated text blocks carry an optional `origin`: `system_reminder`, `interrupti Tests in `session/handle.rs` enforce the guarantee for stable releases, using two fixtures per release starting with `v0.1.0`, in `crates/ox-core/src/session/fixtures/` and named after the tag: -- **Fixture source.** One test writes a session holding every row kind and content block, with messages, prompt contexts, and metadata after its compaction so a resume reads them. `session_format::writes_every_row_kind` snapshots a deterministic SQL dump of the store, its schema and then its rows with per-run UUIDs and timestamps masked, and `session_format::exports_every_row_kind` snapshots the session's masked export. For each stable tag, the release PR copies the two snapshots as `{tag}.sql` and `{tag}.jsonl`, as [Prepare a Release](../../RELEASING.md#prepare-a-release) describes. +- **Fixture source.** One test writes a session holding every row kind and content block, with messages, prompt contexts, and metadata after its compaction so a resume reads them. `session_format::writes_every_row_kind` snapshots a deterministic SQL dump of the store, its schema and then its rows with per-run UUIDs and timestamps masked, and `session_format::exports_every_row_kind` snapshots the session's masked export. For each stable tag, the release PR copies the two snapshots as `{tag}.sql` and `{tag}.jsonl`, as [Release Preparation](../../RELEASING.md#release-preparation) describes. - **Resume check.** `session_format::resumes_from_every_release_fixture` fills each fixture's masks with fixed values, loads the dump or imports the export into a fresh store, then lists and resumes the session. It snapshots what the listing and the resume recovered: the title, branch, archive state, compaction, prompt context, transcript, tool metadata, recorded usage, and file snapshots. It then appends a message and checks that the message continues the resumed chain. The same check runs on the dump this build writes, so a pull request that changes the format also shows how its sessions will resume. - **Changed behavior.** If a change alters how an old release's session resumes, that fixture's snapshot fails. Fixtures are frozen release output, so never edit them. Accept a changed fixture snapshot only when this section allows the change. diff --git a/docs/research/api/system-prompt.md b/docs/research/api/system-prompt.md index 5514cd7fb..89c1b00d6 100644 --- a/docs/research/api/system-prompt.md +++ b/docs/research/api/system-prompt.md @@ -153,21 +153,21 @@ Claude Code transforms its flat sections array into the block layout actually se **First-party base URL** (`api.anthropic.com`), global cache active: -| # | Content | `cache_control` | -| --- | -------------------------------- | --------------------------------------------------- | -| 0 | Billing / attribution header | - | -| 1 | Identity prefix | - | -| 2 | Static sections joined (`\n\n`) | `{ type: "ephemeral", scope: "global", ttl: "1h" }` | -| 3 | Dynamic sections joined (`\n\n`) | - | +| # | Content | `cache_control` | +| - | -------------------------------- | --------------------------------------------------- | +| 0 | Billing / attribution header | - | +| 1 | Identity prefix | - | +| 2 | Static sections joined (`\n\n`) | `{ type: "ephemeral", scope: "global", ttl: "1h" }` | +| 3 | Dynamic sections joined (`\n\n`) | - | **Third-party base URL** (gateway, self-hosted, anything else), default scope: -| # | Content | `cache_control` | -| --- | -------------------------------- | ---------------------------------- | -| 0 | Billing / attribution header | - | -| 1 | Identity prefix | - | -| 2 | Static sections joined (`\n\n`) | `{ type: "ephemeral", ttl: "1h" }` | -| 3 | Dynamic sections joined (`\n\n`) | - | +| # | Content | `cache_control` | +| - | -------------------------------- | ---------------------------------- | +| 0 | Billing / attribution header | - | +| 1 | Identity prefix | - | +| 2 | Static sections joined (`\n\n`) | `{ type: "ephemeral", ttl: "1h" }` | +| 3 | Dynamic sections joined (`\n\n`) | - | Omitting the `scope` field is deliberate: org is the absent-field default, and the resulting wire shape is what the Anthropic SDK ships for non-global ephemeral caches. `ttl` follows `prompt_cache_ttl`: `"1h"` is shown, and with `"5m"` the field is omitted because that is the server default. diff --git a/flake.lock b/flake.lock index 65158ad33..41b61a743 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,28 @@ { "nodes": { + "devkit": { + "inputs": { + "git-hooks-nix": "git-hooks-nix", + "nixpkgs": [ + "nixpkgs" + ], + "nixpkgs-unstable": "nixpkgs-unstable" + }, + "locked": { + "lastModified": 1794204530, + "narHash": "sha256-kcljoojFDwhCLZd3GTFwDA0jM+QcRqDfwBHxHIE/38o=", + "owner": "hakula139", + "repo": "devkit", + "rev": "1fb13ed3f76630638d442677abd25c6d20b1d954", + "type": "github" + }, + "original": { + "owner": "hakula139", + "ref": "v2", + "repo": "devkit", + "type": "github" + } + }, "flake-compat": { "flake": false, "locked": { @@ -20,15 +43,16 @@ "inputs": { "flake-compat": "flake-compat", "nixpkgs": [ + "devkit", "nixpkgs" ] }, "locked": { - "lastModified": 1793686154, - "narHash": "sha256-Zb/0L3soxrkfcrywpfp0J++0WFLB3tzh0Xtx9up+VNc=", + "lastModified": 1791909798, + "narHash": "sha256-VAhpCOmrun/KXimYfR8NM88bciKCui7CqHHhThSzgag=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "204b6977e00caac19e2313015a598543ca7be150", + "rev": "1ba1dbfe28738c9a71c266be6efa5b89e75491a9", "type": "github" }, "original": { @@ -74,9 +98,25 @@ "type": "github" } }, + "nixpkgs-unstable": { + "locked": { + "lastModified": 1793540411, + "narHash": "sha256-fiPJ88izTVucjeo2EQ3jk4aWmLg03I1D4vxnX2QjEgE=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "0bb2eedc20e4739f29e8045034f2828ad7054f8f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "root": { "inputs": { - "git-hooks-nix": "git-hooks-nix", + "devkit": "devkit", "home-manager": "home-manager", "nixpkgs": "nixpkgs", "rust-overlay": "rust-overlay" diff --git a/flake.nix b/flake.nix index 2c6bbc635..60a213374 100644 --- a/flake.nix +++ b/flake.nix @@ -23,8 +23,8 @@ inputs.nixpkgs.follows = "nixpkgs"; }; - git-hooks-nix = { - url = "github:cachix/git-hooks.nix"; + devkit = { + url = "github:hakula139/devkit/v2"; inputs.nixpkgs.follows = "nixpkgs"; }; @@ -42,28 +42,11 @@ self, nixpkgs, rust-overlay, - git-hooks-nix, + devkit, home-manager, ... }: let - inherit (nixpkgs) lib; - - # git-hooks.nix has dropped x86_64-darwin, which Nixpkgs supports only through 26.05. - systems = [ - "aarch64-darwin" - "aarch64-linux" - "x86_64-linux" - ]; - - eachSystem = - f: - let - bySystem = lib.genAttrs systems f; - outputs = builtins.attrNames bySystem.${builtins.head systems}; - in - lib.genAttrs outputs (output: builtins.mapAttrs (_: attrs: attrs.${output}) bySystem); - packageFor = pkgs: self.packages.${pkgs.stdenv.hostPlatform.system}.oxide-code @@ -85,11 +68,11 @@ imports = [ (import ./nix/home-manager.nix { inherit packageFor; }) ]; }; } - // eachSystem ( + // devkit.lib.eachSystem devkit.lib.systems ( system: let pkgs = nixpkgs.legacyPackages.${system}; - nodejs = pkgs.nodejs_26; + dk = devkit.lib.mkLib pkgs; rustBin = rust-overlay.lib.mkRustBin { } pkgs; rustToolchain = rustBin.fromRustupToolchainFile ./rust-toolchain.toml; @@ -105,21 +88,27 @@ # ------------------------------------------------------------------------------------------ # Pre-commit Hooks # ------------------------------------------------------------------------------------------ - hooks = { - end-of-file-fixer.enable = true; - trim-trailing-whitespace.enable = true; - check-added-large-files.enable = true; - check-shebang-scripts-are-executable.enable = true; - check-yaml.enable = true; - taplo.enable = true; - - nixfmt.enable = true; - deadnix.enable = true; - statix.enable = true; - - shellcheck.enable = true; + preCommit = dk.preCommit { + src = ./.; + hooks = { + actionlint.enable = true; + check-shebang-scripts-are-executable.enable = true; + check-yaml.enable = true; + cspell.enable = true; + deadnix.enable = true; + dprint.enable = true; + markdownlint-cli2.enable = true; + nixfmt.enable = true; + prettier.enable = true; + shellcheck.enable = true; + shfmt.enable = true; + sort-file-contents.enable = true; + statix.enable = true; + taplo.enable = true; + }; - rustfmt = { + # CI checks formatting without fetching the pinned toolchain in the Nix sandbox. + devHooks.rustfmt = { enable = true; packageOverrides = { cargo = rustToolchain; @@ -128,64 +117,6 @@ }; }; - # These hooks run tools pinned in node_modules, which the Nix sandbox lacks. The flake check - # leaves them to CI's Lint job. - nodeHook = - name: cmd: - pkgs.lib.getExe ( - pkgs.writeShellApplication { - inherit name; - runtimeInputs = with pkgs; [ - nodejs - pnpm - ]; - - text = '' - pnpm exec ${cmd} "$@" - ''; - } - ); - - nodeHooks = { - prettier-write = { - enable = true; - name = "prettier"; - entry = nodeHook "prettier-write" "prettier --write --ignore-unknown"; - require_serial = true; - types = [ "text" ]; - }; - - cspell = { - enable = true; - package = null; - entry = nodeHook "cspell" "cspell --no-must-find-files --no-progress"; - require_serial = true; - types = [ "text" ]; - }; - - markdownlint = { - enable = true; - name = "markdownlint-cli2"; - package = null; - entry = nodeHook "markdownlint" "markdownlint-cli2 --fix"; - require_serial = true; - files = "\\.md$"; - }; - }; - - preCommit = git-hooks-nix.lib.${system}.run { - hooks = hooks // nodeHooks; - src = ./.; - }; - - # The flake check leaves rustfmt to CI's Rust job, so it never fetches the pinned toolchain. - preCommitCheck = git-hooks-nix.lib.${system}.run { - hooks = removeAttrs hooks [ "rustfmt" ]; - src = ./.; - }; - - flock = pkgs.lib.getExe pkgs.flock; - git = pkgs.lib.getExe pkgs.git; in { # ------------------------------------------------------------------------------------------ @@ -198,32 +129,16 @@ packages = [ rustDevToolchain ] - ++ preCommit.enabledPackages - ++ [ preCommit.config.package ] ++ (with pkgs; [ cargo-deny cargo-insta cargo-llvm-cov cargo-mutants git-cliff - nodejs - pnpm sqlite ]); - # Use shared hooks to avoid the relative path bug in linked worktrees (git-hooks.nix#688). - # Serialize installation, and leave sibling repositories that borrow this shell untouched. - shellHook = '' - if common=$(${git} rev-parse --path-format=absolute --git-common-dir 2>/dev/null) && - top=$(${git} rev-parse --show-toplevel 2>/dev/null) && - [ -f "$top/crates/ox/Cargo.toml" ]; then - ( - ${flock} 9 - ${preCommit.config.installationScript} - ${git} config --local --unset-all core.hooksPath || true - ) 9>"$common/git-hooks.lock" - fi - ''; + inputsFrom = [ preCommit.shell ]; }; # CI's Lint job runs in this shell, which leaves out the pinned toolchain so that every tool @@ -235,9 +150,7 @@ packages = with pkgs; [ cargo cargo-deny - nodejs nushell - pnpm ]; }; @@ -253,7 +166,7 @@ # Checks # ------------------------------------------------------------------------------------------ checks = { - pre-commit = preCommitCheck; + pre-commit = preCommit.check; home-manager = import ./nix/home-manager-tests.nix { inherit home-manager oxide-code pkgs; diff --git a/package.json b/package.json deleted file mode 100644 index 7797c5817..000000000 --- a/package.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "private": true, - "scripts": { - "format": "prettier --check .", - "lint": "markdownlint-cli2 \"**/*.md\"", - "spellcheck": "git ls-files | cspell --no-progress --file-list stdin" - }, - "devDependencies": { - "cspell": "^10.4.0", - "markdownlint-cli2": "^0.24.0", - "prettier": "^3.9.10" - } -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index 2d13b49ea..000000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,1506 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -overrides: - markdownlint>re2js: ~2.9.0 - micromark-extension-math>katex: ^0.19.0 - -importers: - - .: - devDependencies: - cspell: - specifier: ^10.4.0 - version: 10.4.1 - markdownlint-cli2: - specifier: ^0.24.0 - version: 0.24.0 - prettier: - specifier: ^3.9.10 - version: 3.9.10 - -packages: - - '@cspell/cspell-bundled-dicts@10.4.1': - resolution: {integrity: sha512-QkDsQSUa6qK/2/AF43YYTrN1rpsJN3Yn1ckA3qH9zmBn0N/tkCWaJ675wo8j1CguPjZdPBF1t4J5tLcjiQv/Dg==} - engines: {node: '>=22.18.0'} - - '@cspell/cspell-json-reporter@10.4.1': - resolution: {integrity: sha512-PV0fshBdl78839JMs0H8rpq6766TTdZQPdT+tiZ1+atarso+gZLxM4DXMqePdCBbhgV46jbW91DoN4KZIYUysA==} - engines: {node: '>=22.18.0'} - - '@cspell/cspell-performance-monitor@10.4.1': - resolution: {integrity: sha512-hVYcJ3i8vnuo+8lK+awOsuYHIA2rlFS/DIW/ZIjKmCcVjgdNTVAWtx/EQs3mqGZGegJTOPaSv1uGvLpLgtLTHw==} - engines: {node: '>=22.18.0'} - - '@cspell/cspell-pipe@10.4.1': - resolution: {integrity: sha512-7P4srvEo/LUyoGTwwsnijCZzUKTyC39N9seYyk7/u4DHmww4cQpKW3ktWdZu90hOP1hV+zdAptUMnHTHxa5NmQ==} - engines: {node: '>=22.18.0'} - - '@cspell/cspell-resolver@10.4.1': - resolution: {integrity: sha512-7aKxe59PqwVHUIQQJaN//RiiooCudG4sU+ycKUUUcEKN04vxQuo582Desa1WQQsKMH4VjCLZF1XD5lCmnpS0rw==} - engines: {node: '>=22.18.0'} - - '@cspell/cspell-service-bus@10.4.1': - resolution: {integrity: sha512-sC7dR3kfGIugcAjVjIfKKfI1T/r+2E1ps9a7aXqAJRmfLZAKXbnKGO5aeVGHKmtxGw/odZEDDOis2uwq2tdUfQ==} - engines: {node: '>=22.18.0'} - - '@cspell/cspell-types@10.4.1': - resolution: {integrity: sha512-FfaRrnrZ3xD09Tq6C49BdAZSx+tLM38Z60vFR/1+qQMQejUOHhv/lQ3UNN4I9z+P3BhmKutcLf8M8IOwlMfOtQ==} - engines: {node: '>=22.18.0'} - - '@cspell/cspell-worker@10.4.1': - resolution: {integrity: sha512-H6+jTNdXsb5NYRG0g29axVVVS3VHvtXCeggD3p0tRVnBF/SBJZVdsHkQJPFSSAjgMNXPq8S1zhEJzmQECG9G6A==} - engines: {node: '>=22.18.0'} - - '@cspell/dict-ada@4.1.1': - resolution: {integrity: sha512-E+0YW9RhZod/9Qy2gxfNZiHJjCYFlCdI69br1eviQQWB8yOTJX0JHXLs79kOYhSW0kINPVUdvddEBe6Lu6CjGQ==} - - '@cspell/dict-al@1.1.1': - resolution: {integrity: sha512-sD8GCaZetgQL4+MaJLXqbzWcRjfKVp8x+px3HuCaaiATAAtvjwUQ5/Iubiqwfd1boIh2Y1/3EgM3TLQ7Q8e0wQ==} - - '@cspell/dict-aws@4.0.17': - resolution: {integrity: sha512-ORcblTWcdlGjIbWrgKF+8CNEBQiLVKdUOFoTn0KPNkAYnFcdPP0muT4892h7H4Xafh3j72wqB4/loQ6Nti9E/w==} - - '@cspell/dict-bash@4.2.3': - resolution: {integrity: sha512-ljUZoKHbDqw5Sx0qpL2qTUlmkmr+vhZH/sCNrNaBZKTbdgiswErSnIF1jRbGmEitJNxHRHWsuZyVgnTGfVO1Yw==} - - '@cspell/dict-companies@3.2.14': - resolution: {integrity: sha512-3EeCXEjd6ocbKNEHsPHViHJrDduJsVo9ixr0EMrzUO6OVCXlLSCLosDUzeANQidu/u6WA1ln63uRJ9fAGAKHzw==} - - '@cspell/dict-cpp@7.2.0': - resolution: {integrity: sha512-hxz+OyQKV96/Bk2JYGsDuSOheYA5gd8KybXnoZMMu/mhZPnwhPi+qiS0Kjc0gLNbXjJ6wbBuXIQWi1UWpQBU/g==} - - '@cspell/dict-cryptocurrencies@5.0.5': - resolution: {integrity: sha512-R68hYYF/rtlE6T/dsObStzN5QZw+0aQBinAXuWCVqwdS7YZo0X33vGMfChkHaiCo3Z2+bkegqHlqxZF4TD3rUA==} - - '@cspell/dict-csharp@4.0.8': - resolution: {integrity: sha512-qmk45pKFHSxckl5mSlbHxmDitSsGMlk/XzFgt7emeTJWLNSTUK//MbYAkBNRtfzB4uD7pAFiKgpKgtJrTMRnrQ==} - - '@cspell/dict-css@4.1.2': - resolution: {integrity: sha512-+ylGoKdwZ2sVOCOnU2Eq5wDZx+RaVX3HoKyNHGGsFvhSw6IidQ6tH/mAPKBDofViHJoWCPNlklE0lTr6MDG3QA==} - - '@cspell/dict-dart@2.3.2': - resolution: {integrity: sha512-sUiLW56t9gfZcu8iR/5EUg+KYyRD83Cjl3yjDEA2ApVuJvK1HhX+vn4e4k4YfjpUQMag8XO2AaRhARE09+/rqw==} - - '@cspell/dict-data-science@2.0.17': - resolution: {integrity: sha512-6KuM1tXc1PROGu2VJjRMIkFI3lf/1c3ReFqbjV148m5w8SwNVej4Jp6nJa2f64xyaR5Z+LSRTr5RvDDJVovP8A==} - - '@cspell/dict-django@4.1.7': - resolution: {integrity: sha512-94LIxiF/StBTxDkmBhi1eoOX9D/B7gk6pabBvIZFh0gmREAU6ESqU2Wv/RfGARdueMQMPfOJka+vbtL4yKv0oA==} - - '@cspell/dict-docker@1.1.17': - resolution: {integrity: sha512-OcnVTIpHIYYKhztNTyK8ShAnXTfnqs43hVH6p0py0wlcwRIXe5uj4f12n7zPf2CeBI7JAlPjEsV0Rlf4hbz/xQ==} - - '@cspell/dict-dotnet@5.0.15': - resolution: {integrity: sha512-j2MUKPlzMeDy/mnb1EjmtkX8e6VzZdw60Qyf6vPlp7WZhUwwp2LBlKOWx7+hASjP6k4a0nDpmn77G+4upxvbZA==} - - '@cspell/dict-elixir@4.0.8': - resolution: {integrity: sha512-CyfphrbMyl4Ms55Vzuj+mNmd693HjBFr9hvU+B2YbFEZprE5AG+EXLYTMRWrXbpds4AuZcvN3deM2XVB80BN/Q==} - - '@cspell/dict-en-common-misspellings@2.2.6': - resolution: {integrity: sha512-RMOmCPOJuBfcC8IVLKjs9aqssjLKmhwVI8Yw/xgEnO9trWAiUzESassDATE229xqi1sdtRIIMGHyuxlkL75Xjg==} - - '@cspell/dict-en-gb-mit@3.1.32': - resolution: {integrity: sha512-bEASyTAzXLowmFWrZIJjeAeCpY9g3jcYDO3tVyFDL/UaAuz0UvCVgOEyg+Ym7bclijqvXmj0xXOD/cW2XWG8iw==} - - '@cspell/dict-en_us@4.4.43': - resolution: {integrity: sha512-RK0zfFXSPi0G/zmV9YgUhS2xw9eTV/8DtQ+ouLIiRZ8ejWRt2zhAonu5di+qmIhzhQ62fg7d3tMz3WwRy82yJA==} - - '@cspell/dict-filetypes@3.0.18': - resolution: {integrity: sha512-yU7RKD/x1IWmDLzWeiItMwgV+6bUcU/af23uS0+uGiFUbsY1qWV/D4rxlAAO6Z7no3J2z8aZOkYIOvUrJq0Rcw==} - - '@cspell/dict-flutter@1.1.1': - resolution: {integrity: sha512-UlOzRcH2tNbFhZmHJN48Za/2/MEdRHl2BMkCWZBYs+30b91mWvBfzaN4IJQU7dUZtowKayVIF9FzvLZtZokc5A==} - - '@cspell/dict-fonts@4.0.6': - resolution: {integrity: sha512-aR/0csY01dNb0A1tw/UmN9rKgHruUxsYsvXu6YlSBJFu60s26SKr/k1o4LavpHTQ+lznlYMqAvuxGkE4Flliqw==} - - '@cspell/dict-fsharp@1.1.1': - resolution: {integrity: sha512-imhs0u87wEA4/cYjgzS0tAyaJpwG7vwtC8UyMFbwpmtw+/bgss+osNfyqhYRyS/ehVCWL17Ewx2UPkexjKyaBA==} - - '@cspell/dict-fullstack@3.2.9': - resolution: {integrity: sha512-diZX+usW5aZ4/b2T0QM/H/Wl9aNMbdODa1Jq0ReBr/jazmNeWjd+PyqeVgzd1joEaHY+SAnjrf/i9CwKd2ZtWQ==} - - '@cspell/dict-gaming-terms@1.1.3': - resolution: {integrity: sha512-hLGzd/f+KX5B/5YxAXuQi4DYEfu6IKudtNFO/Nima3JLXD+8Xn+d0q6VdaBxkWVhGYlzow9o+dce+S9mNtgpMg==} - - '@cspell/dict-git@3.1.1': - resolution: {integrity: sha512-XvuGVYj9YEu4EzntqyhH8XlTRyy57C6j8oxkIbUQfR2UYzxZGAP77XHl7qY7eC/40r/haDwnBaccyFR6BRmUCg==} - - '@cspell/dict-golang@6.0.29': - resolution: {integrity: sha512-EZCgfxrr5lPnYQLmSvB6YtpfoDFt2KKxAD4ppq2xGSIgDFXAF7Mv4doiXIFUQaynCBIEfAMl3f/uDfrIUo4fyQ==} - - '@cspell/dict-google@1.0.9': - resolution: {integrity: sha512-biL65POqialY0i4g6crj7pR6JnBkbsPovB2WDYkj3H4TuC/QXv7Pu5pdPxeUJA6TSCHI7T5twsO4VSVyRxD9CA==} - - '@cspell/dict-haskell@4.0.6': - resolution: {integrity: sha512-ib8SA5qgftExpYNjWhpYIgvDsZ/0wvKKxSP+kuSkkak520iPvTJumEpIE+qPcmJQo4NzdKMN8nEfaeci4OcFAQ==} - - '@cspell/dict-html-symbol-entities@4.0.5': - resolution: {integrity: sha512-429alTD4cE0FIwpMucvSN35Ld87HCyuM8mF731KU5Rm4Je2SG6hmVx7nkBsLyrmH3sQukTcr1GaiZsiEg8svPA==} - - '@cspell/dict-html@4.0.16': - resolution: {integrity: sha512-9B6/Cpb5YVcYgsEAlKudun1yd4ONllYS/ZibKLYea2apPR+l2vQdARnPrP9kTqa7NUNfRKl7m9Fb6k9rjimnow==} - - '@cspell/dict-java@5.0.12': - resolution: {integrity: sha512-qPSNhTcl7LGJ5Qp6VN71H8zqvRQK04S08T67knMq9hTA8U7G1sTKzLmBaDOFhq17vNX/+rT+rbRYp+B5Nwza1A==} - - '@cspell/dict-julia@1.1.1': - resolution: {integrity: sha512-WylJR9TQ2cgwd5BWEOfdO3zvDB+L7kYFm0I9u0s9jKHWQ6yKmfKeMjU9oXxTBxIufhCXm92SKwwVNAC7gjv+yA==} - - '@cspell/dict-k8s@1.0.13': - resolution: {integrity: sha512-ELGkS13k7K/NEfVimBSrxVTfqXvOF/Kvxj4I62YxRm8bvHbfoXgrGaOx28lPiNRz+dmu+yYtvuXbnURKtYbC6g==} - - '@cspell/dict-kotlin@1.1.1': - resolution: {integrity: sha512-J3NzzfgmxRvEeOe3qUXnSJQCd38i/dpF9/t3quuWh6gXM+krsAXP75dY1CzDmS8mrJAlBdVBeAW5eAZTD8g86Q==} - - '@cspell/dict-latex@5.1.0': - resolution: {integrity: sha512-qxT4guhysyBt0gzoliXYEBYinkAdEtR2M7goRaUH0a7ltCsoqqAeEV8aXYRIdZGcV77gYSobvu3jJL038tlPAw==} - - '@cspell/dict-lorem-ipsum@4.0.5': - resolution: {integrity: sha512-9a4TJYRcPWPBKkQAJ/whCu4uCAEgv/O2xAaZEI0n4y1/l18Yyx8pBKoIX5QuVXjjmKEkK7hi5SxyIsH7pFEK9Q==} - - '@cspell/dict-lua@4.0.8': - resolution: {integrity: sha512-N4PkgNDMu9JVsRu7JBS/3E/dvfItRgk9w5ga2dKq+JupP2Y3lojNaAVFhXISh4Y0a6qXDn2clA6nvnavQ/jjLA==} - - '@cspell/dict-makefile@1.0.5': - resolution: {integrity: sha512-4vrVt7bGiK8Rx98tfRbYo42Xo2IstJkAF4tLLDMNQLkQ86msDlYSKG1ZCk8Abg+EdNcFAjNhXIiNO+w4KflGAQ==} - - '@cspell/dict-markdown@2.0.18': - resolution: {integrity: sha512-KLRSwVrwKDz4n7bl2XQjzvaBZbGgx5QKkP5Ok1b24xaO3TpXsLhAbAn1mItvFlI2tF6Rkt83iYjQcYppywuf5Q==} - peerDependencies: - '@cspell/dict-css': ^4.1.2 - '@cspell/dict-html': ^4.0.16 - '@cspell/dict-html-symbol-entities': ^4.0.5 - '@cspell/dict-typescript': ^3.2.3 - - '@cspell/dict-monkeyc@1.1.2': - resolution: {integrity: sha512-4VzwdSUVqyUVmAKAzMkVwVa7AkvSi1l1OHdQr58MWq4VR4NQDO8sVQSibd2PMxruXTkxJt9UwVQVHgaaVTiV1Q==} - - '@cspell/dict-node@5.0.9': - resolution: {integrity: sha512-hO+ga+uYZ/WA4OtiMEyKt5rDUlUyu3nXMf8KVEeqq2msYvAPdldKBGH7lGONg6R/rPhv53Rb+0Y1SLdoK1+7wQ==} - - '@cspell/dict-npm@5.2.56': - resolution: {integrity: sha512-VqN/f97X64gYR7zVXLu2PN6t5Sm6EljZEFp4htmbOL9tGqs0XVErl9B9kwfaLlKJqfLU6vYcupjRBjqTQ6rQ4Q==} - - '@cspell/dict-php@4.1.3': - resolution: {integrity: sha512-41oKzl7rLVrrVZA/Gs0ESnP6KliEX7c+IwaaNmOL3PAoHasFDVEmIFeENIzuDdM12UcHT+MlLkAm3Qw/lS/ERA==} - - '@cspell/dict-powershell@5.0.17': - resolution: {integrity: sha512-khOoIdBgKRk2scnr7888pf70yJ1Tr3RGdnYcAN0MJ2vtaNRKoOTCFc13gXUkNDHwEyhMI1h9oz3KsT180F2amw==} - - '@cspell/dict-public-licenses@2.0.17': - resolution: {integrity: sha512-Asdumgg3oZ4ki//b2a+beiVIsNZA5thim4t4v3lTDLY/6a8VAPmTjzC3Y2t0x7ywC/bzAhi1KW/fg8JlwHDgig==} - - '@cspell/dict-python@4.5.3': - resolution: {integrity: sha512-I226HEEJW4fleE0HMxRaecnzcJICFK6TOqIjqVkOJZzaVZTTjE7fojM+f5XECAwhf4BImW7HVOKMu4rMtza6ZA==} - - '@cspell/dict-r@2.1.1': - resolution: {integrity: sha512-71Ka+yKfG4ZHEMEmDxc6+blFkeTTvgKbKAbwiwQAuKl3zpqs1Y0vUtwW2N4b3LgmSPhV3ODVY0y4m5ofqDuKMw==} - - '@cspell/dict-ruby@5.1.4': - resolution: {integrity: sha512-Slw1dLY/pW5liJ5Fle+MIPphIdleZkIM6STDoXCN7sy298GfbfT34sJTcSZcXzZJVXiCEAvlLp+s1YNr6DuWNg==} - - '@cspell/dict-rust@4.1.2': - resolution: {integrity: sha512-O1FHrumYcO+HZti3dHfBPUdnDFkI+nbYK3pxYmiM1sr+G0ebOd6qchmswS0Wsc6ZdEVNiPYJY/gZQR6jfW3uOg==} - - '@cspell/dict-scala@5.0.11': - resolution: {integrity: sha512-+D59847Y61KZ0MBoXJzBMtOXfFhezEb6ShjvJlL7bnryyy6iBwAfozbz7OJAe+KrEpYm+GlVV7Wy4FmJSgxBag==} - - '@cspell/dict-shell@1.2.0': - resolution: {integrity: sha512-PVctvT22lJ49niMiakO8xieY7ELCAzjSqhejWR7bAMb5AZ9F4WDEs+XdGMnoVHWeXq7K5rcepLPmEJb+37zzIw==} - - '@cspell/dict-software-terms@5.4.9': - resolution: {integrity: sha512-bB5L+OGW0F8Vt83j0XFcMEWCbCNqquLgjlQjm/iCp1jcYi/pQbqDLkXIPbINgbeG0vRqiu5yCPDFCsv4Qb6miQ==} - - '@cspell/dict-sql@2.2.1': - resolution: {integrity: sha512-qDHF8MpAYCf4pWU8NKbnVGzkoxMNrFqBHyG/dgrlic5EQiKANCLELYtGlX5auIMDLmTf1inA0eNtv74tyRJ/vg==} - - '@cspell/dict-svelte@1.0.7': - resolution: {integrity: sha512-hGZsGqP0WdzKkdpeVLBivRuSNzOTvN036EBmpOwxH+FTY2DuUH7ecW+cSaMwOgmq5JFSdTcbTNFlNC8HN8lhaQ==} - - '@cspell/dict-swift@2.0.6': - resolution: {integrity: sha512-PnpNbrIbex2aqU1kMgwEKvCzgbkHtj3dlFLPMqW1vSniop7YxaDTtvTUO4zA++ugYAEL+UK8vYrBwDPTjjvSnA==} - - '@cspell/dict-terraform@1.1.4': - resolution: {integrity: sha512-Ere42ilvMFvQA4GlcN0OKlruMPR6EsvaB+iTHzj2xc+NJGRK64V7yApUcWrOrSgTiM/vhWXPIsK3OMfiAiNdmA==} - - '@cspell/dict-typescript@3.2.3': - resolution: {integrity: sha512-zXh1wYsNljQZfWWdSPYwQhpwiuW0KPW1dSd8idjMRvSD0aSvWWHoWlrMsmZeRl4qM4QCEAjua8+cjflm41cQBg==} - - '@cspell/dict-vue@3.0.5': - resolution: {integrity: sha512-Mqutb8jbM+kIcywuPQCCaK5qQHTdaByoEO2J9LKFy3sqAdiBogNkrplqUK0HyyRFgCfbJUgjz3N85iCMcWH0JA==} - - '@cspell/dict-zig@1.0.0': - resolution: {integrity: sha512-XibBIxBlVosU06+M6uHWkFeT0/pW5WajDRYdXG2CgHnq85b0TI/Ks0FuBJykmsgi2CAD3Qtx8UHFEtl/DSFnAQ==} - - '@cspell/dynamic-import@10.4.1': - resolution: {integrity: sha512-0TlwRH0VHL3atb2QC7l8PK0CRGNmVqRPCqL84rqWlEHrh1bOqvK+2EvMRnf9nSSx5IdS2rXZYibrSfcEY0cUqQ==} - engines: {node: '>=22.18.0'} - - '@cspell/filetypes@10.4.1': - resolution: {integrity: sha512-ztHYeAA/cKAJdX90xjVY+RjJN9im2POkY2wAztDQjOUtP+8qztWHtdk5mOBcRXv7Q93ivBY9N0ZmctakE3+A7Q==} - engines: {node: '>=22.18.0'} - - '@cspell/rpc@10.4.1': - resolution: {integrity: sha512-rkNS7F1q+aofcex3lun2YzxMybx2pUXgVB1mFRC7LOQhrFOqs85FYg0Absc2sKr2QmedckgWj3Du91ZJn0eChA==} - engines: {node: '>=22.18.0'} - - '@cspell/strong-weak-map@10.4.1': - resolution: {integrity: sha512-Bap/Gs0/G4NE6KQtT+dNvyGBC2iHws+5il/nvFUuZ1D5dLEK/SYeOuLCX/hdCvcPEF02kr8NxJfY7oK/w8YFiQ==} - engines: {node: '>=22.18.0'} - - '@cspell/url@10.4.1': - resolution: {integrity: sha512-QoFi7+fMsBMz9l1wULNcVfyih2DarTv9Z+QKkQGuC/a1Xq70Veoh/JRtczDoOXCAsgutX12VHlHtu9nPRhahoQ==} - engines: {node: '>=22.18.0'} - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@sindresorhus/merge-streams@4.0.0': - resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} - engines: {node: '>=18'} - - '@streetsidesoftware/unindent@1.0.1': - resolution: {integrity: sha512-ZXfg7MT3AT9ZOq/hgzbqNc01zVPG+PFkr+kbB2OHlMcNrtvK10ZPkNgy38MqTErjNeajh4VG1sSSv5zIyjOXxg==} - engines: {node: '>=22.18.0'} - - '@types/debug@4.1.13': - resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} - - '@types/katex@0.16.8': - resolution: {integrity: sha512-trgaNyfU+Xh2Tc+ABIb44a5AYUpicB3uwirOioeOkNPPbmgRNtcWyDeeFRzjPZENO9Vq8gvVqfhaaXWLlevVwg==} - - '@types/ms@2.1.0': - resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - - '@types/unist@2.0.11': - resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} - - ansi-regex@6.5.0: - resolution: {integrity: sha512-zhvbbbdt1kbw7EJ9OQoxmQcuaNR9P5kTj7e/YdmOSU10aHWbycofJxA6jKfoEy3vlLdctOF9ZHaxLtmSm998wQ==} - engines: {node: '>=12'} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - argparse@3.0.4: - resolution: {integrity: sha512-fwWK3Zq22l4XJJjx5mcBHGikIk+hJqO+32dPm0Jur7+rtG5x1scOjSfdT9ZKeWHPpsya/l0HHK4tDImBkTrtvA==} - - array-timsort@1.0.3: - resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==} - - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - - chalk-template@1.1.3: - resolution: {integrity: sha512-KDt7oQ+LRF2VLFsTAZd76ZNCKQa8LuW7SZkNJMkriMzvlSNj6dI+S+f41mfK9oTtil49seHVyabtt1753sFL2w==} - engines: {node: '>=14.16'} - - chalk@5.6.2: - resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - - chalk@6.0.1: - resolution: {integrity: sha512-/Ce6KNm3vIbWdMlNna6RVIZ/ICQxnJxCicet5LBKK9ZffBkqzDw0xh9EiKSljdRtiIQ1S1z4YgcscUUGzNCWrA==} - engines: {node: '>=22'} - - character-entities-legacy@3.0.0: - resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} - - character-entities@2.0.2: - resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} - - character-reference-invalid@2.0.1: - resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} - - commander@15.0.0: - resolution: {integrity: sha512-z67u4ZhzCL/Tydu1lJARtEZYWbWaN7oYLHbsuzocr6y4N6WZAagG3RQ4FW61V1/0+jImpj293XfrcYnd1qxtPg==} - engines: {node: '>=22.12.0'} - - comment-json@5.0.0: - resolution: {integrity: sha512-uiqLcOiVDJtBP8WGkZHEP+FZIhTzP1dxvn59EfoYUi9gqupjrBWVQkO2atDrbnKPwLeotFYDsuNb26uBMqB+hw==} - engines: {node: '>= 6'} - - cspell-config-lib@10.4.1: - resolution: {integrity: sha512-g6XYIdwwIlvakGsIaBtddakSXe35DIwREDptBxLhf0rcIdMv0n4Ii9BluaX+RgzMzRavkBlLS19quNLl80g+LA==} - engines: {node: '>=22.18.0'} - - cspell-dictionary@10.4.1: - resolution: {integrity: sha512-o9aIAsY0R+MMBbhFEF7aP77NaNETdp1YbZTRN0Xt4JsXQzjX9CMSXOm7WepRVk4Cf9DSSBdyhOYVbECu+2T0wg==} - engines: {node: '>=22.18.0'} - - cspell-gitignore@10.4.1: - resolution: {integrity: sha512-YGX9WrxBOma0zNbR8RrVQWmtVJzHMy71ouljbJ/iC8HHTFwaVUlKEFMzvpSYLTAMSMVpa1Cc+9HpUjCcxiyOaA==} - engines: {node: '>=22.18.0'} - hasBin: true - - cspell-glob@10.4.1: - resolution: {integrity: sha512-bgLVOtD1sDSE0NxTXva6A9HSoxPhet4y709czloJ2bEDb0FNLl+kKJl2hEX0GtMztaNuLWK8nmb9y4RiJbON1Q==} - engines: {node: '>=22.18.0'} - - cspell-grammar@10.4.1: - resolution: {integrity: sha512-LqXg57TQp/7UPH2XJC6WZTfTLvV0iP+8Ox0Gkyo0tFr+ijBWBB2KnPGEX1udtzZqaRpGokT2xi5rB3zO/lAxgg==} - engines: {node: '>=22.18.0'} - hasBin: true - - cspell-io@10.4.1: - resolution: {integrity: sha512-4AtNoBOFDHKDul2teL+PsmvZlIM+U1uWxFVGmzCtP4xVENKm1WlgwOoSSsQVvZDBlMRLjkWbsHJAKIR3f97wfg==} - engines: {node: '>=22.18.0'} - - cspell-lib@10.4.1: - resolution: {integrity: sha512-mX9UfN3hpcfdbqLWYIzLiJ81W2dhcgJfBDo3H1YAPK+yXZobSxtHeyQQBBapJ6Ca84U2R6AWNjuSjCneeISogg==} - engines: {node: '>=22.18.0'} - - cspell-trie-lib@10.4.1: - resolution: {integrity: sha512-MOxZ3b2MLNfRWXz1Seh6xXGvUclMxA9h11tCBj6+Y0pd+7KtNk7YMlzmHIGOnbF9W5YZNtA2bMuYbVlefcOa1w==} - engines: {node: '>=22.18.0'} - peerDependencies: - '@cspell/cspell-types': 10.4.1 - - cspell@10.4.1: - resolution: {integrity: sha512-/6r9R7Pv78VFuD4uKogu2g6SG+Lms78sLBesgEPR8YJ/VEbEYAz6cbXv86m3FMlqWJdccvnG6WiPNt2Ce8SZAw==} - engines: {node: '>=22.18.0'} - hasBin: true - - debug@4.4.3: - resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - decode-named-character-reference@1.3.0: - resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} - - dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - - devlop@1.1.0: - resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - - entities@8.1.0: - resolution: {integrity: sha512-kxL7msIffSuh9aaFAMD7rxAIuTRMAHMeBtgHW2yUdWw732ZNh4MehkF2gdjvtdmikkaIP9bFDDJOPlsvm7avrA==} - engines: {node: '>=20.19.0'} - - env-paths@4.0.0: - resolution: {integrity: sha512-pxP8eL2SwwaTRi/KHYwLYXinDs7gL3jxFcBYmEdYfZmZXbaVDvdppd0XBU8qVz03rDfKZMXg1omHCbsJjZrMsw==} - engines: {node: '>=20'} - - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - - fast-equals@6.2.2: - resolution: {integrity: sha512-n+XqoarWCgcar0O3om3DeNYx6xTuLWGTUF1bRZ9iuO00tsPepzP1L4V7rqtxxZ4PEya34UCESReimFvxmEVwIA==} - engines: {node: '>=6.0.0'} - - fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} - - fastq@1.20.3: - resolution: {integrity: sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw==} - - fdir@6.5.0: - resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} - engines: {node: '>=12.0.0'} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - - flatted@3.4.4: - resolution: {integrity: sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==} - - gensequence@8.0.8: - resolution: {integrity: sha512-omMVniXEXpdx/vKxGnPRoO2394Otlze28TyxECbFVyoSpZ9H3EO7lemjcB12OpQJzRW4e5tt/dL1rOxry6aMHg==} - engines: {node: '>=20'} - - get-east-asian-width@1.7.0: - resolution: {integrity: sha512-XjH1AECxf0giL2V1aU8vKyRR2ppRUb5c0EvT7zuJTokQ74bNo52zOtghqdWIqrhUD79fo3x0WfKZdOqxF6LG1Q==} - engines: {node: '>=18'} - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - global-directory@5.0.0: - resolution: {integrity: sha512-1pgFdhK3J2LeM+dVf2Pd424yHx2ou338lC0ErNP2hPx4j8eW1Sp0XqSjNxtk6Tc4Kr5wlWtSvz8cn2yb7/SG/w==} - engines: {node: '>=20'} - - globby@16.2.4: - resolution: {integrity: sha512-c8B/VNLmxRcmqqenRA9t+9IyOjf9+V6lTxPaUJLqOCONdQkWZ0ETYgX0qbtJqPsgCNusT9MZ5Jeidw8Eb9tn2g==} - engines: {node: '>=20'} - - ignore@7.0.14: - resolution: {integrity: sha512-wCBiZ77u1tuWde6G/nfOtLaCTYcFDU5yCzARzK10y+rLhzYoL7a7yEemcopcc2Mzow7gZOIjnV2ym1NYmdiJOQ==} - engines: {node: '>= 4'} - - import-fresh@4.0.1: - resolution: {integrity: sha512-/XFeXYgkuWgbtqPC7qPKvciXTvhtz7WMNQKQsAM1Kz+j0I5OWJDrybfiya6QtHF9oEvPkLwTHmC9+4OR/MmfIA==} - engines: {node: '>=22.15'} - - import-meta-resolve@4.2.0: - resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} - - ini@6.0.0: - resolution: {integrity: sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==} - engines: {node: ^20.17.0 || >=22.9.0} - - is-alphabetical@2.0.1: - resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} - - is-alphanumerical@2.0.1: - resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} - - is-decimal@2.0.1: - resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-hexadecimal@2.0.1: - resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-path-inside@4.0.0: - resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} - engines: {node: '>=12'} - - is-safe-filename@0.1.1: - resolution: {integrity: sha512-4SrR7AdnY11LHfDKTZY1u6Ga3RuxZdl3YKWWShO5iyuG5h8QS4GD2tOb04peBJ5I7pXbR+CGBNEhTcwK+FzN3g==} - engines: {node: '>=20'} - - js-yaml@5.4.3: - resolution: {integrity: sha512-yzzNtgczwgoVHNigCyKTXcQJU4Y8t/ikU4UxXW0BvrLfHTGWZhsNcOT2s/a7vn81/4KqVnNmHjaUEPlvWnNwVw==} - hasBin: true - - jsonc-parser@3.3.1: - resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} - - jsonpointer@5.0.1: - resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} - engines: {node: '>=0.10.0'} - - katex@0.19.1: - resolution: {integrity: sha512-jG8uKntjSEcm2EpQOh0XturpPuuC9r3Sq5HLHdsFdWZT27E672SF19QEi+of0/YeOy15lDgRhKvr5614uRrEfA==} - hasBin: true - - linkify-it@6.1.0: - resolution: {integrity: sha512-wJ/TwpSDTLepCrQoYWYIExIKg5Zchex2Nn5yk2mFnB+6PtdkHtyLx742md9csRjjOnGkKIS/RrbY7l8D6gT9Vw==} - - markdown-it@15.0.3: - resolution: {integrity: sha512-+Az7Ojz3iRGu8KYMvJ6xVhvrxP3eE+vEtJX75Ow88XBpcQNV/0lGX5ZynIIBftREo4DC2jsveAMDaeltmm8QvQ==} - hasBin: true - - markdownlint-cli2-formatter-default@0.0.6: - resolution: {integrity: sha512-VVDGKsq9sgzu378swJ0fcHfSicUnMxnL8gnLm/Q4J/xsNJ4e5bA6lvAz7PCzIl0/No0lHyaWdqVD2jotxOSFMQ==} - peerDependencies: - markdownlint-cli2: '>=0.0.4' - - markdownlint-cli2@0.24.0: - resolution: {integrity: sha512-c5hU2MDoTlS230MLzdNlkIyxImXq5acxGKz4nYz4aDhH/2BgFtpsA7iK9/OoTHMgZ4FuR0wedTQA31K6Lp9I/Q==} - engines: {node: '>=22'} - hasBin: true - - markdownlint@0.42.0: - resolution: {integrity: sha512-kzsCV/rPWRFn3jUhcB919YF4Qgeh0g9tcogoXFadGSo6Zxj6662YOqWXv0jDn8nv5KCCxDfMKJZv6N4HkNkvTg==} - engines: {node: '>=22'} - - mdurl@2.1.0: - resolution: {integrity: sha512-1+HBaOx0zi/dQWht8rNv9MYf9qqpqL/kxI0hXImU6Y547zM6Sni8BQibt7ifgMcYtQg41ao3Ivd6cnSM86inpg==} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - micromark-core-commonmark@2.0.4: - resolution: {integrity: sha512-wxEeE8v8XVvOrxn1TZj74qYhAtTQsSqufHVS3uNVyT1MupXxhyaHk8/9xDNPh9BmL77QNDgWTkZ3RsYHB2ry7w==} - - micromark-extension-directive@4.0.0: - resolution: {integrity: sha512-/C2nqVmXXmiseSSuCdItCMho7ybwwop6RrrRPk0KbOHW21JKoCldC+8rFOaundDoRBUWBnJJcxeA/Kvi34WQXg==} - - micromark-extension-gfm-autolink-literal@2.1.0: - resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} - - micromark-extension-gfm-footnote@2.1.0: - resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} - - micromark-extension-gfm-table@2.1.2: - resolution: {integrity: sha512-pRzm4kDTu0MjlmBkxmS9yYhw60nncfcEwu9NNdPFSQEFXS95ZKyIIyTSHu/o3ReBUrLKYEq+7YaXCRn/bPB4MA==} - - micromark-extension-math@3.1.0: - resolution: {integrity: sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==} - - micromark-factory-destination@2.0.1: - resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} - - micromark-factory-label@2.0.1: - resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} - - micromark-factory-space@2.1.0: - resolution: {integrity: sha512-fS8hnLIjnjvdQIj39Geug8wWsR0HrYZ43KShKxNfwT7t2LOHo/LbWZEzEaSOjwtjdCsjoE6syHhonEzW0zv0+Q==} - - micromark-factory-title@2.0.1: - resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} - - micromark-factory-whitespace@2.0.1: - resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} - - micromark-util-character@2.1.1: - resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} - - micromark-util-chunked@2.0.1: - resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} - - micromark-util-classify-character@2.0.1: - resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} - - micromark-util-combine-extensions@2.0.1: - resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} - - micromark-util-decode-numeric-character-reference@2.0.2: - resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} - - micromark-util-edit-map@1.0.0: - resolution: {integrity: sha512-Pa2ljlsEL6sVwFaYeyrOLSYbQt73JvGbPOYFq+9AElXiSnfI5Q4465RRZ1sHv7lDjDOnGRDDaqPXqClqWK/q1Q==} - - micromark-util-encode@2.0.1: - resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} - - micromark-util-html-tag-name@2.0.1: - resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} - - micromark-util-normalize-identifier@2.0.1: - resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} - - micromark-util-resolve-all@2.0.1: - resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} - - micromark-util-sanitize-uri@2.0.1: - resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} - - micromark-util-subtokenize@2.1.0: - resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} - - micromark-util-symbol@2.0.1: - resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} - - micromark-util-types@2.0.3: - resolution: {integrity: sha512-oxB2Ik03hI0gv+VNn9tnh1t1YEe9MDPptViAEgfdf3YQHsn0pzGTgCdlSCJXcwhqm8phaEuM7zeEu3QQzVBrPg==} - - micromark@4.0.3: - resolution: {integrity: sha512-oGYfQzHSG5dOMovQcJ3fyTmZlWAWpi0XA0sJwJs+i6OT88o1+Jtw/8z0CmdowSLxGhhFK89rQ/oXph/wN02PNw==} - - micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - parse-entities@4.0.2: - resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} - - picomatch@2.3.2: - resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} - engines: {node: '>=8.6'} - - picomatch@4.0.7: - resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==} - engines: {node: '>=12'} - - prettier@3.9.10: - resolution: {integrity: sha512-skGHTH1Yb9QvaTC4hWnRTzEYtCpApF0UMBPz+t/0ZPzP8ihefo/btKd+QA7pUE0fEwA1SbS/NmhyEcstdXOIdA==} - engines: {node: '>=14'} - hasBin: true - - punycode.js@2.3.1: - resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} - engines: {node: '>=6'} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - re2js@2.9.1: - resolution: {integrity: sha512-JIT3bEEUZTOR2YS1walNEIfH4cF/cQeZcBUFq7ldqO6lR6g0X5CBq/S8rsa9omzZcsNf8qc36jCkWpKKtncrZg==} - engines: {node: '>=20.0.0'} - - resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - - reusify@1.1.0: - resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - semver@7.8.6: - resolution: {integrity: sha512-9lpSSU4Mly3mrtruwLs1eLK6+gzbzqeBFwRNjIjE+9LuDpWdYctrQlQ3ej1Ilgi7gknpsTRnPoLP8DpCHqHIJw==} - engines: {node: '>=10'} - hasBin: true - - slash@5.1.0: - resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} - engines: {node: '>=14.16'} - - smol-toml@1.9.1: - resolution: {integrity: sha512-j7WyPdf0CJoutMzMoPLF/bVXHtKZIT9Rb4eGeEbWw8X2t5oirjPgpL+OpaENZrILYaXqYwnVH+qgUwVbl+pUJQ==} - engines: {node: '>= 18'} - - string-width@8.3.0: - resolution: {integrity: sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ==} - engines: {node: '>=20'} - - strip-ansi@7.2.0: - resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} - engines: {node: '>=12'} - - tinyglobby@0.2.17: - resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} - engines: {node: '>=12.0.0'} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - uc.micro@3.0.0: - resolution: {integrity: sha512-U3PppEkleoTnIfi8BozMx3yju3qc/L6SwqWo2Sw+54PX+PX0q9I+r1Um5HCmqD7n9VDX5/v3vQH/AjA6deDdtw==} - - unicorn-magic@0.4.1: - resolution: {integrity: sha512-lzlXPoVB0Uy/FvTaUgX39RbixYiSKoc3JSoSf01+0c2B6FR3qdYIPN7Qjo/AV7n6sqLCk0509cT3LRj1oSZ1+A==} - engines: {node: '>=20'} - - vscode-languageserver-textdocument@1.0.16: - resolution: {integrity: sha512-qeNEuOi9a3qkqRf7Gfez2WL2VwlBTLCNekHBGO9kxPVUp9XuY15yfTJ9jwvOwKI0I2MhUUfZq95NSp+LK1CLQg==} - - vscode-uri@3.2.0: - resolution: {integrity: sha512-m2gXo3bn0G1kT9InzMf07fTbqMbGtyckj3bH5ktLO+1Ssv+yiATZ4dhwaQv9UZWxJh6E9IFGnQyjgWVDWVBDrg==} - - xdg-basedir@5.1.0: - resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} - engines: {node: '>=12'} - - yaml@2.9.1: - resolution: {integrity: sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==} - engines: {node: '>= 14.6'} - hasBin: true - -snapshots: - - '@cspell/cspell-bundled-dicts@10.4.1': - dependencies: - '@cspell/dict-ada': 4.1.1 - '@cspell/dict-al': 1.1.1 - '@cspell/dict-aws': 4.0.17 - '@cspell/dict-bash': 4.2.3 - '@cspell/dict-companies': 3.2.14 - '@cspell/dict-cpp': 7.2.0 - '@cspell/dict-cryptocurrencies': 5.0.5 - '@cspell/dict-csharp': 4.0.8 - '@cspell/dict-css': 4.1.2 - '@cspell/dict-dart': 2.3.2 - '@cspell/dict-data-science': 2.0.17 - '@cspell/dict-django': 4.1.7 - '@cspell/dict-docker': 1.1.17 - '@cspell/dict-dotnet': 5.0.15 - '@cspell/dict-elixir': 4.0.8 - '@cspell/dict-en-common-misspellings': 2.2.6 - '@cspell/dict-en-gb-mit': 3.1.32 - '@cspell/dict-en_us': 4.4.43 - '@cspell/dict-filetypes': 3.0.18 - '@cspell/dict-flutter': 1.1.1 - '@cspell/dict-fonts': 4.0.6 - '@cspell/dict-fsharp': 1.1.1 - '@cspell/dict-fullstack': 3.2.9 - '@cspell/dict-gaming-terms': 1.1.3 - '@cspell/dict-git': 3.1.1 - '@cspell/dict-golang': 6.0.29 - '@cspell/dict-google': 1.0.9 - '@cspell/dict-haskell': 4.0.6 - '@cspell/dict-html': 4.0.16 - '@cspell/dict-html-symbol-entities': 4.0.5 - '@cspell/dict-java': 5.0.12 - '@cspell/dict-julia': 1.1.1 - '@cspell/dict-k8s': 1.0.13 - '@cspell/dict-kotlin': 1.1.1 - '@cspell/dict-latex': 5.1.0 - '@cspell/dict-lorem-ipsum': 4.0.5 - '@cspell/dict-lua': 4.0.8 - '@cspell/dict-makefile': 1.0.5 - '@cspell/dict-markdown': 2.0.18(@cspell/dict-css@4.1.2)(@cspell/dict-html-symbol-entities@4.0.5)(@cspell/dict-html@4.0.16)(@cspell/dict-typescript@3.2.3) - '@cspell/dict-monkeyc': 1.1.2 - '@cspell/dict-node': 5.0.9 - '@cspell/dict-npm': 5.2.56 - '@cspell/dict-php': 4.1.3 - '@cspell/dict-powershell': 5.0.17 - '@cspell/dict-public-licenses': 2.0.17 - '@cspell/dict-python': 4.5.3 - '@cspell/dict-r': 2.1.1 - '@cspell/dict-ruby': 5.1.4 - '@cspell/dict-rust': 4.1.2 - '@cspell/dict-scala': 5.0.11 - '@cspell/dict-shell': 1.2.0 - '@cspell/dict-software-terms': 5.4.9 - '@cspell/dict-sql': 2.2.1 - '@cspell/dict-svelte': 1.0.7 - '@cspell/dict-swift': 2.0.6 - '@cspell/dict-terraform': 1.1.4 - '@cspell/dict-typescript': 3.2.3 - '@cspell/dict-vue': 3.0.5 - '@cspell/dict-zig': 1.0.0 - - '@cspell/cspell-json-reporter@10.4.1': - dependencies: - '@cspell/cspell-types': 10.4.1 - - '@cspell/cspell-performance-monitor@10.4.1': {} - - '@cspell/cspell-pipe@10.4.1': {} - - '@cspell/cspell-resolver@10.4.1': - dependencies: - global-directory: 5.0.0 - - '@cspell/cspell-service-bus@10.4.1': {} - - '@cspell/cspell-types@10.4.1': {} - - '@cspell/cspell-worker@10.4.1': - dependencies: - cspell-lib: 10.4.1 - - '@cspell/dict-ada@4.1.1': {} - - '@cspell/dict-al@1.1.1': {} - - '@cspell/dict-aws@4.0.17': {} - - '@cspell/dict-bash@4.2.3': - dependencies: - '@cspell/dict-shell': 1.2.0 - - '@cspell/dict-companies@3.2.14': {} - - '@cspell/dict-cpp@7.2.0': {} - - '@cspell/dict-cryptocurrencies@5.0.5': {} - - '@cspell/dict-csharp@4.0.8': {} - - '@cspell/dict-css@4.1.2': {} - - '@cspell/dict-dart@2.3.2': {} - - '@cspell/dict-data-science@2.0.17': {} - - '@cspell/dict-django@4.1.7': {} - - '@cspell/dict-docker@1.1.17': {} - - '@cspell/dict-dotnet@5.0.15': {} - - '@cspell/dict-elixir@4.0.8': {} - - '@cspell/dict-en-common-misspellings@2.2.6': {} - - '@cspell/dict-en-gb-mit@3.1.32': {} - - '@cspell/dict-en_us@4.4.43': {} - - '@cspell/dict-filetypes@3.0.18': {} - - '@cspell/dict-flutter@1.1.1': {} - - '@cspell/dict-fonts@4.0.6': {} - - '@cspell/dict-fsharp@1.1.1': {} - - '@cspell/dict-fullstack@3.2.9': {} - - '@cspell/dict-gaming-terms@1.1.3': {} - - '@cspell/dict-git@3.1.1': {} - - '@cspell/dict-golang@6.0.29': {} - - '@cspell/dict-google@1.0.9': {} - - '@cspell/dict-haskell@4.0.6': {} - - '@cspell/dict-html-symbol-entities@4.0.5': {} - - '@cspell/dict-html@4.0.16': {} - - '@cspell/dict-java@5.0.12': {} - - '@cspell/dict-julia@1.1.1': {} - - '@cspell/dict-k8s@1.0.13': {} - - '@cspell/dict-kotlin@1.1.1': {} - - '@cspell/dict-latex@5.1.0': {} - - '@cspell/dict-lorem-ipsum@4.0.5': {} - - '@cspell/dict-lua@4.0.8': {} - - '@cspell/dict-makefile@1.0.5': {} - - '@cspell/dict-markdown@2.0.18(@cspell/dict-css@4.1.2)(@cspell/dict-html-symbol-entities@4.0.5)(@cspell/dict-html@4.0.16)(@cspell/dict-typescript@3.2.3)': - dependencies: - '@cspell/dict-css': 4.1.2 - '@cspell/dict-html': 4.0.16 - '@cspell/dict-html-symbol-entities': 4.0.5 - '@cspell/dict-typescript': 3.2.3 - - '@cspell/dict-monkeyc@1.1.2': {} - - '@cspell/dict-node@5.0.9': {} - - '@cspell/dict-npm@5.2.56': {} - - '@cspell/dict-php@4.1.3': {} - - '@cspell/dict-powershell@5.0.17': {} - - '@cspell/dict-public-licenses@2.0.17': {} - - '@cspell/dict-python@4.5.3': - dependencies: - '@cspell/dict-data-science': 2.0.17 - - '@cspell/dict-r@2.1.1': {} - - '@cspell/dict-ruby@5.1.4': {} - - '@cspell/dict-rust@4.1.2': {} - - '@cspell/dict-scala@5.0.11': {} - - '@cspell/dict-shell@1.2.0': {} - - '@cspell/dict-software-terms@5.4.9': {} - - '@cspell/dict-sql@2.2.1': {} - - '@cspell/dict-svelte@1.0.7': {} - - '@cspell/dict-swift@2.0.6': {} - - '@cspell/dict-terraform@1.1.4': {} - - '@cspell/dict-typescript@3.2.3': {} - - '@cspell/dict-vue@3.0.5': {} - - '@cspell/dict-zig@1.0.0': {} - - '@cspell/dynamic-import@10.4.1': - dependencies: - '@cspell/url': 10.4.1 - import-meta-resolve: 4.2.0 - - '@cspell/filetypes@10.4.1': {} - - '@cspell/rpc@10.4.1': {} - - '@cspell/strong-weak-map@10.4.1': {} - - '@cspell/url@10.4.1': {} - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.20.3 - - '@sindresorhus/merge-streams@4.0.0': {} - - '@streetsidesoftware/unindent@1.0.1': {} - - '@types/debug@4.1.13': - dependencies: - '@types/ms': 2.1.0 - - '@types/katex@0.16.8': {} - - '@types/ms@2.1.0': {} - - '@types/unist@2.0.11': {} - - ansi-regex@6.5.0: {} - - argparse@2.0.1: {} - - argparse@3.0.4: {} - - array-timsort@1.0.3: {} - - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - - chalk-template@1.1.3: - dependencies: - chalk: 5.6.2 - - chalk@5.6.2: {} - - chalk@6.0.1: {} - - character-entities-legacy@3.0.0: {} - - character-entities@2.0.2: {} - - character-reference-invalid@2.0.1: {} - - commander@15.0.0: {} - - comment-json@5.0.0: - dependencies: - array-timsort: 1.0.3 - esprima: 4.0.1 - - cspell-config-lib@10.4.1: - dependencies: - '@cspell/cspell-types': 10.4.1 - comment-json: 5.0.0 - smol-toml: 1.9.1 - yaml: 2.9.1 - - cspell-dictionary@10.4.1: - dependencies: - '@cspell/cspell-performance-monitor': 10.4.1 - '@cspell/cspell-pipe': 10.4.1 - '@cspell/cspell-types': 10.4.1 - cspell-trie-lib: 10.4.1(@cspell/cspell-types@10.4.1) - fast-equals: 6.2.2 - - cspell-gitignore@10.4.1: - dependencies: - '@cspell/url': 10.4.1 - cspell-glob: 10.4.1 - cspell-io: 10.4.1 - - cspell-glob@10.4.1: - dependencies: - '@cspell/url': 10.4.1 - picomatch: 4.0.7 - - cspell-grammar@10.4.1: - dependencies: - '@cspell/cspell-pipe': 10.4.1 - '@cspell/cspell-types': 10.4.1 - - cspell-io@10.4.1: - dependencies: - '@cspell/cspell-service-bus': 10.4.1 - '@cspell/url': 10.4.1 - - cspell-lib@10.4.1: - dependencies: - '@cspell/cspell-bundled-dicts': 10.4.1 - '@cspell/cspell-performance-monitor': 10.4.1 - '@cspell/cspell-pipe': 10.4.1 - '@cspell/cspell-resolver': 10.4.1 - '@cspell/cspell-types': 10.4.1 - '@cspell/dynamic-import': 10.4.1 - '@cspell/filetypes': 10.4.1 - '@cspell/rpc': 10.4.1 - '@cspell/strong-weak-map': 10.4.1 - '@cspell/url': 10.4.1 - cspell-config-lib: 10.4.1 - cspell-dictionary: 10.4.1 - cspell-glob: 10.4.1 - cspell-grammar: 10.4.1 - cspell-io: 10.4.1 - cspell-trie-lib: 10.4.1(@cspell/cspell-types@10.4.1) - env-paths: 4.0.0 - gensequence: 8.0.8 - import-fresh: 4.0.1 - resolve-from: 5.0.0 - vscode-languageserver-textdocument: 1.0.16 - vscode-uri: 3.2.0 - xdg-basedir: 5.1.0 - - cspell-trie-lib@10.4.1(@cspell/cspell-types@10.4.1): - dependencies: - '@cspell/cspell-types': 10.4.1 - - cspell@10.4.1: - dependencies: - '@cspell/cspell-json-reporter': 10.4.1 - '@cspell/cspell-performance-monitor': 10.4.1 - '@cspell/cspell-pipe': 10.4.1 - '@cspell/cspell-types': 10.4.1 - '@cspell/cspell-worker': 10.4.1 - '@cspell/dynamic-import': 10.4.1 - '@cspell/url': 10.4.1 - '@streetsidesoftware/unindent': 1.0.1 - ansi-regex: 6.5.0 - chalk: 6.0.1 - chalk-template: 1.1.3 - commander: 15.0.0 - cspell-config-lib: 10.4.1 - cspell-dictionary: 10.4.1 - cspell-gitignore: 10.4.1 - cspell-glob: 10.4.1 - cspell-io: 10.4.1 - cspell-lib: 10.4.1 - flatted: 3.4.4 - semver: 7.8.6 - tinyglobby: 0.2.17 - - debug@4.4.3: - dependencies: - ms: 2.1.3 - - decode-named-character-reference@1.3.0: - dependencies: - character-entities: 2.0.2 - - dequal@2.0.3: {} - - devlop@1.1.0: - dependencies: - dequal: 2.0.3 - - entities@8.1.0: {} - - env-paths@4.0.0: - dependencies: - is-safe-filename: 0.1.1 - - esprima@4.0.1: {} - - fast-equals@6.2.2: {} - - fast-glob@3.3.3: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 - - fastq@1.20.3: - dependencies: - reusify: 1.1.0 - - fdir@6.5.0(picomatch@4.0.7): - optionalDependencies: - picomatch: 4.0.7 - - fill-range@7.1.1: - dependencies: - to-regex-range: 5.0.1 - - flatted@3.4.4: {} - - gensequence@8.0.8: {} - - get-east-asian-width@1.7.0: {} - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - global-directory@5.0.0: - dependencies: - ini: 6.0.0 - - globby@16.2.4: - dependencies: - '@sindresorhus/merge-streams': 4.0.0 - fast-glob: 3.3.3 - ignore: 7.0.14 - is-path-inside: 4.0.0 - micromatch: 4.0.8 - slash: 5.1.0 - unicorn-magic: 0.4.1 - - ignore@7.0.14: {} - - import-fresh@4.0.1: {} - - import-meta-resolve@4.2.0: {} - - ini@6.0.0: {} - - is-alphabetical@2.0.1: {} - - is-alphanumerical@2.0.1: - dependencies: - is-alphabetical: 2.0.1 - is-decimal: 2.0.1 - - is-decimal@2.0.1: {} - - is-extglob@2.1.1: {} - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-hexadecimal@2.0.1: {} - - is-number@7.0.0: {} - - is-path-inside@4.0.0: {} - - is-safe-filename@0.1.1: {} - - js-yaml@5.4.3: - dependencies: - argparse: 2.0.1 - - jsonc-parser@3.3.1: {} - - jsonpointer@5.0.1: {} - - katex@0.19.1: - dependencies: - commander: 15.0.0 - - linkify-it@6.1.0: - dependencies: - uc.micro: 3.0.0 - - markdown-it@15.0.3: - dependencies: - argparse: 3.0.4 - entities: 8.1.0 - linkify-it: 6.1.0 - mdurl: 2.1.0 - punycode.js: 2.3.1 - uc.micro: 3.0.0 - - markdownlint-cli2-formatter-default@0.0.6(markdownlint-cli2@0.24.0): - dependencies: - markdownlint-cli2: 0.24.0 - - markdownlint-cli2@0.24.0: - dependencies: - globby: 16.2.4 - js-yaml: 5.4.3 - jsonc-parser: 3.3.1 - jsonpointer: 5.0.1 - markdown-it: 15.0.3 - markdownlint: 0.42.0 - markdownlint-cli2-formatter-default: 0.0.6(markdownlint-cli2@0.24.0) - micromatch: 4.0.8 - smol-toml: 1.9.1 - transitivePeerDependencies: - - supports-color - - markdownlint@0.42.0: - dependencies: - micromark: 4.0.3 - micromark-core-commonmark: 2.0.4 - micromark-extension-directive: 4.0.0 - micromark-extension-gfm-autolink-literal: 2.1.0 - micromark-extension-gfm-footnote: 2.1.0 - micromark-extension-gfm-table: 2.1.2 - micromark-extension-math: 3.1.0 - micromark-util-types: 2.0.3 - re2js: 2.9.1 - string-width: 8.3.0 - transitivePeerDependencies: - - supports-color - - mdurl@2.1.0: {} - - merge2@1.4.1: {} - - micromark-core-commonmark@2.0.4: - dependencies: - decode-named-character-reference: 1.3.0 - devlop: 1.1.0 - micromark-factory-destination: 2.0.1 - micromark-factory-label: 2.0.1 - micromark-factory-space: 2.1.0 - micromark-factory-title: 2.0.1 - micromark-factory-whitespace: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-chunked: 2.0.1 - micromark-util-classify-character: 2.0.1 - micromark-util-edit-map: 1.0.0 - micromark-util-html-tag-name: 2.0.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-resolve-all: 2.0.1 - micromark-util-subtokenize: 2.1.0 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.3 - - micromark-extension-directive@4.0.0: - dependencies: - devlop: 1.1.0 - micromark-factory-space: 2.1.0 - micromark-factory-whitespace: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.3 - parse-entities: 4.0.2 - - micromark-extension-gfm-autolink-literal@2.1.0: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-sanitize-uri: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.3 - - micromark-extension-gfm-footnote@2.1.0: - dependencies: - devlop: 1.1.0 - micromark-core-commonmark: 2.0.4 - micromark-factory-space: 2.1.0 - micromark-util-character: 2.1.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-sanitize-uri: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.3 - - micromark-extension-gfm-table@2.1.2: - dependencies: - devlop: 1.1.0 - micromark-factory-space: 2.1.0 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.3 - - micromark-extension-math@3.1.0: - dependencies: - '@types/katex': 0.16.8 - devlop: 1.1.0 - katex: 0.19.1 - micromark-factory-space: 2.1.0 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.3 - - micromark-factory-destination@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.3 - - micromark-factory-label@2.0.1: - dependencies: - devlop: 1.1.0 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.3 - - micromark-factory-space@2.1.0: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-types: 2.0.3 - - micromark-factory-title@2.0.1: - dependencies: - micromark-factory-space: 2.1.0 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.3 - - micromark-factory-whitespace@2.0.1: - dependencies: - micromark-factory-space: 2.1.0 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.3 - - micromark-util-character@2.1.1: - dependencies: - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.3 - - micromark-util-chunked@2.0.1: - dependencies: - micromark-util-symbol: 2.0.1 - - micromark-util-classify-character@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.3 - - micromark-util-combine-extensions@2.0.1: - dependencies: - micromark-util-chunked: 2.0.1 - micromark-util-types: 2.0.3 - - micromark-util-decode-numeric-character-reference@2.0.2: - dependencies: - micromark-util-symbol: 2.0.1 - - micromark-util-edit-map@1.0.0: - dependencies: - micromark-util-types: 2.0.3 - - micromark-util-encode@2.0.1: {} - - micromark-util-html-tag-name@2.0.1: {} - - micromark-util-normalize-identifier@2.0.1: - dependencies: - micromark-util-symbol: 2.0.1 - - micromark-util-resolve-all@2.0.1: - dependencies: - micromark-util-types: 2.0.3 - - micromark-util-sanitize-uri@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-encode: 2.0.1 - micromark-util-symbol: 2.0.1 - - micromark-util-subtokenize@2.1.0: - dependencies: - devlop: 1.1.0 - micromark-util-chunked: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.3 - - micromark-util-symbol@2.0.1: {} - - micromark-util-types@2.0.3: {} - - micromark@4.0.3: - dependencies: - '@types/debug': 4.1.13 - debug: 4.4.3 - decode-named-character-reference: 1.3.0 - devlop: 1.1.0 - micromark-core-commonmark: 2.0.4 - micromark-factory-space: 2.1.0 - micromark-util-character: 2.1.1 - micromark-util-chunked: 2.0.1 - micromark-util-combine-extensions: 2.0.1 - micromark-util-decode-numeric-character-reference: 2.0.2 - micromark-util-edit-map: 1.0.0 - micromark-util-encode: 2.0.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-resolve-all: 2.0.1 - micromark-util-sanitize-uri: 2.0.1 - micromark-util-subtokenize: 2.1.0 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.3 - transitivePeerDependencies: - - supports-color - - micromatch@4.0.8: - dependencies: - braces: 3.0.3 - picomatch: 2.3.2 - - ms@2.1.3: {} - - parse-entities@4.0.2: - dependencies: - '@types/unist': 2.0.11 - character-entities-legacy: 3.0.0 - character-reference-invalid: 2.0.1 - decode-named-character-reference: 1.3.0 - is-alphanumerical: 2.0.1 - is-decimal: 2.0.1 - is-hexadecimal: 2.0.1 - - picomatch@2.3.2: {} - - picomatch@4.0.7: {} - - prettier@3.9.10: {} - - punycode.js@2.3.1: {} - - queue-microtask@1.2.3: {} - - re2js@2.9.1: {} - - resolve-from@5.0.0: {} - - reusify@1.1.0: {} - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - semver@7.8.6: {} - - slash@5.1.0: {} - - smol-toml@1.9.1: {} - - string-width@8.3.0: - dependencies: - get-east-asian-width: 1.7.0 - strip-ansi: 7.2.0 - - strip-ansi@7.2.0: - dependencies: - ansi-regex: 6.5.0 - - tinyglobby@0.2.17: - dependencies: - fdir: 6.5.0(picomatch@4.0.7) - picomatch: 4.0.7 - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - uc.micro@3.0.0: {} - - unicorn-magic@0.4.1: {} - - vscode-languageserver-textdocument@1.0.16: {} - - vscode-uri@3.2.0: {} - - xdg-basedir@5.1.0: {} - - yaml@2.9.1: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml deleted file mode 100644 index 4913fa6f2..000000000 --- a/pnpm-workspace.yaml +++ /dev/null @@ -1,5 +0,0 @@ -verifyDepsBeforeRun: install - -overrides: - markdownlint>re2js: ~2.9.0 - micromark-extension-math>katex: ^0.19.0