diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index 070d50b8d5..5f7df45548 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -16,56 +16,29 @@ jobs: remark-lint: name: runner / remark-lint runs-on: ubuntu-latest + steps: - uses: actions/checkout@v7 - with: - fetch-depth: 0 - - name: Install pnpm - uses: pnpm/action-setup@v6 + # npm (not pnpm) is intentional: remark-cli is installed globally by the + # action at /usr/local/lib/node_modules/. pnpm's global store is not on + # that resolution path, so remark-cli would fall back to resolving + # remark-mdx from the project's node_modules, where @mdx-js/react pulls + # in mdast-util-mdx-jsx@3 — incompatible with remark-cli@10's bundled + # unified v10 stack. npm -g puts the remark plugins next to remark-cli so + # the versions stay compatible. + # + # install_deps: false prevents the action from running npm install and + # reintroducing the incompatible project dependencies. + - name: Install remark plugins globally + run: npm install -g remark-mdx@2 remark-lint-no-undefined-references@4 remark-directive@3 remark-frontmatter@4 + + - name: remark-lint + uses: reviewdog/action-remark-lint@v5 with: - # Pinned below 11.12.0, whose self-install crashes with - # "Cannot use 'in' operator to search for 'integrity' in undefined". - # https://github.com/pnpm/action-setup/issues/276 - # https://github.com/pnpm/pnpm/issues/12959 - version: 11.11.0 - - - name: Install remark plugins and reviewdog - run: | - npm install -g remark-cli@10 remark-lint@10 remark-preset-lint-recommended remark-mdx@2 remark-lint-no-undefined-references@4 remark-directive@3 - curl -sfL https://raw.githubusercontent.com/reviewdog/reviewdog/master/install.sh | sh -s -- -b /tmp - # reviewdog/action-remark-lint runs remark against a directory, but this - - # repository currently has existing repo-wide remark warnings. Because this - # workflow fails on warnings, running remark on the whole repository would - # fail PRs for warnings unrelated to the modified files. - # Until the existing repo-wide warnings are cleaned up, lint only Markdown/MDX - # files changed in the current PR and pipe the result to reviewdog manually. - # See the follow-up cleanup issue before reverting this back to - # reviewdog/action-remark-lint. - - - name: Find changed Markdown files - id: changed_files - run: | - git fetch origin ${{ github.base_ref }} - git diff --name-only --diff-filter=ACMRT origin/${{ github.base_ref }}...HEAD -- '*.md' '*.mdx' > changed-markdown-files.txt - - if [ -s changed-markdown-files.txt ]; then - echo "has_changed_files=true" >> "$GITHUB_OUTPUT" - cat changed-markdown-files.txt - else - echo "has_changed_files=false" >> "$GITHUB_OUTPUT" - echo "No changed Markdown files." - fi - - - name: remark-lint changed files - if: steps.changed_files.outputs.has_changed_files == 'true' - run: | - remark $(cat changed-markdown-files.txt) --use=remark-preset-lint-recommended --use=remark-mdx --use=remark-directive --ext .md,.mdx 2>&1 \ - | sed 's/\x1b\[[0-9;]*m//g' \ - | /tmp/reviewdog -f=remark-lint \ - -name="remark-lint" \ - -reporter="github-pr-review" \ - -filter-mode="nofilter" \ - -fail-level="warning" \ - -level="warning" + github_token: ${{ secrets.GITHUB_TOKEN }} + reporter: github-pr-review + fail_level: "warning" + level: "warning" + install_deps: false + remark_args: "--use=remark-preset-lint-recommended --use=remark-mdx --use=remark-directive --use=remark-frontmatter --ext .md,.mdx" diff --git a/.memsearch/.index-state.json b/.memsearch/.index-state.json deleted file mode 100644 index 91f0f63c59..0000000000 --- a/.memsearch/.index-state.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "collection": "ms_rts_docs_f1cd2d40", - "failed_files": [], - "indexed_chunks": 1, - "indexed_files": 6, - "last_completed_at": "2026-07-21T18:32:57.171985Z", - "last_started_at": "2026-07-21T18:32:55.572924Z", - "last_success_at": "2026-07-21T18:32:57.171985Z", - "milvus_uri": "~/.memsearch/milvus.db", - "operation": "index", - "paths": ["/Users/ss19980/Documents/packages/rts-docs/.memsearch/memory"], - "schema_version": 1, - "status": "ok", - "total_files": 6, - "updated_at": "2026-07-21T18:32:57.171985Z" -} diff --git a/docs/genai/01_getting_started/01_intro.mdx b/docs/genai/01_getting_started/01_intro.mdx index 2b9cd71255..2432df5471 100644 --- a/docs/genai/01_getting_started/01_intro.mdx +++ b/docs/genai/01_getting_started/01_intro.mdx @@ -5,8 +5,8 @@ If you looking to access LLMs for non-research workflows, please reach out to th ::: Welcome to Pythia, the generative AI platform for research workflows. As part of the Pythia platform, the following capabilities are offered: -- [Access to externally hosted LLMs](../01_getting_started/02_llm_gateway.mdx) -- [HPC resources for fine tuning LLMs](../../hpc/08_ml_ai_hpc/05_llm_fine_tuning.md) +- [Access to externally hosted LLMs](../01_getting_started/02_llm_gateway.mdx) +- [HPC resources for fine tuning LLMs](../../hpc/08_ml_ai_hpc/05_llm_fine_tuning.md) :::info[Personal use] If you want to access NYU provided LLMs for personal use, proceed to https://gemini.google.com/app with your NYU credentials. diff --git a/docs/genai/04_how_to_guides/02_embeddings.mdx b/docs/genai/04_how_to_guides/02_embeddings.mdx index 291e8fd2d9..824d734091 100644 --- a/docs/genai/04_how_to_guides/02_embeddings.mdx +++ b/docs/genai/04_how_to_guides/02_embeddings.mdx @@ -43,9 +43,9 @@ and gives the following response: ## Applications of Embeddings Embeddings are typically used for: -- retrieval-augmented generation -- search -- classification +- retrieval-augmented generation +- search +- classification :::info Embeddings are typically stored in a *vector* database which is designed for efficient storage and fast retrieval of vectors. diff --git a/docs/genai/04_how_to_guides/03_retrieval_augmented_generation.mdx b/docs/genai/04_how_to_guides/03_retrieval_augmented_generation.mdx index e6a82c95fe..d2fadd7fdd 100644 --- a/docs/genai/04_how_to_guides/03_retrieval_augmented_generation.mdx +++ b/docs/genai/04_how_to_guides/03_retrieval_augmented_generation.mdx @@ -5,8 +5,8 @@ For an in-depth overview of RAG and Jupyter notebook examples, please access the ::: Large Language Models only know about the data they were trained upon and do not have the context needed to be effective at answering questions based on: -- private datasets -- newer knowledge past the cutoff date (i.e. the date at which data collection was frozen) +- private datasets +- newer knowledge past the cutoff date (i.e. the date at which data collection was frozen) To get around this issue, one of the most popular techniques is Retrieval-augmented generation, the most basic version of which is outlined below: diff --git a/docs/hpc/01_getting_started/02_HPC_Accounts/01_getting_and_renewing_an_account.mdx b/docs/hpc/01_getting_started/02_HPC_Accounts/01_getting_and_renewing_an_account.mdx index 8a3d19241e..60de48f595 100644 --- a/docs/hpc/01_getting_started/02_HPC_Accounts/01_getting_and_renewing_an_account.mdx +++ b/docs/hpc/01_getting_started/02_HPC_Accounts/01_getting_and_renewing_an_account.mdx @@ -121,7 +121,7 @@ Linux clients are not officially supported, however we were able to successfully apt-get install openconnect sudo openconnect -b vpn.nyu.edu ``` - - When prompted follow the instructions and provide your netID, password, and authenticate with ('push', 'phone1' or 'sms') + - When prompted follow the instructions and provide your netID, password, and authenticate with ('push', 'phone1' or 'sms') This method was tested on few Linux distributions and settings however is not guaranteed to work in future. diff --git a/docs/hpc/03_storage/08_sharing_data_on_hpc.mdx b/docs/hpc/03_storage/08_sharing_data_on_hpc.mdx index 98433b4268..87ce5f6567 100644 --- a/docs/hpc/03_storage/08_sharing_data_on_hpc.mdx +++ b/docs/hpc/03_storage/08_sharing_data_on_hpc.mdx @@ -88,14 +88,14 @@ g-DEPT-LABNAME Once you have a group assigned, managers of the group can use the `ipa` commands to manage members via the login nodes. Relevant user commands include: -- `ipa group-add-member`: Add members to a group. - - Example: +- `ipa group-add-member`: Add members to a group. + - Example: `ipa group-add-member GROUP-NAME --users='NETID'` -- `ipa group-add-member-manager`: Add users that can manage members of this group. - - Example: +- `ipa group-add-member-manager`: Add users that can manage members of this group. + - Example: `ipa group-add-member-manager GROUP-NAME --users='NETID'` -- `ipa group-find`: Search for groups. - - Example: +- `ipa group-find`: Search for groups. + - Example: ``` ipa group-find test ---------------- @@ -111,16 +111,16 @@ ipa group-find test Number of entries returned 2 ---------------------------- ``` -- `ipa group-remove-member`: Remove members from a group. - - Example: +- `ipa group-remove-member`: Remove members from a group. + - Example: `ipa group-remove-member --users=NETID` -- `ipa group-remove-member-manager`: Remove users that can manage members of this group. - - Example: +- `ipa group-remove-member-manager`: Remove users that can manage members of this group. + - Example: `ipa group-remove-member-manager --users=NETID` -- `ipa group-show`: Display information about a named group. - - Example: +- `ipa group-show`: Display information about a named group. + - Example: `ipa group-show GROUP-NAME` - - Example: + - Example: ``` [mdw303@torch-login-1 ~]$ ipa group-show g-hpc-mdw303test Group name: g-hpc-mdw303test diff --git a/docs/hpc/06_tools_and_software/05_r_packages_with_renv.mdx b/docs/hpc/06_tools_and_software/05_r_packages_with_renv.mdx index 7a283d50bd..9c40a2a42e 100644 --- a/docs/hpc/06_tools_and_software/05_r_packages_with_renv.mdx +++ b/docs/hpc/06_tools_and_software/05_r_packages_with_renv.mdx @@ -195,8 +195,8 @@ renv::init() ### What to save/publish/commit with Git In order to have your work reproducible by you and/or others: -- save and/or commit your code in git -- be sure to include `renv.lock` (which lists all packages and versions that you use including the version of R) +- save and/or commit your code in git +- be sure to include `renv.lock` (which lists all packages and versions that you use including the version of R) ### Migrating from Packrat The `renv` package has replaced the now deprecated `Packrat` package. The `renv::migrate()` function makes it possible to migrate projects from `Packrat` to `renv`. See the ?migrate documentation for more details. In essence, calling `renv::migrate("")` will be enough to migrate the `Packrat` library and lockfile such that they can then be used by `renv`. diff --git a/docs/hpc/06_tools_and_software/09_vscode_remote_ssh_torch.mdx b/docs/hpc/06_tools_and_software/09_vscode_remote_ssh_torch.mdx index 89aba1e2c3..ff2db536e1 100644 --- a/docs/hpc/06_tools_and_software/09_vscode_remote_ssh_torch.mdx +++ b/docs/hpc/06_tools_and_software/09_vscode_remote_ssh_torch.mdx @@ -21,8 +21,8 @@ Ensure that you SSH client has been configured [as described here](../02_connect Install the VSCode Remote - SSH extension. Configure Remote - SSH settings: -1. Enable `Remote.SSH: Lockfiles In Tmp` -2. Unable `Remote.SSH: Use Flock` +1. Enable `Remote.SSH: Lockfiles In Tmp` +2. Unable `Remote.SSH: Use Flock` Because Torch requires Microsoft device authentication during SSH login, VSCode may time out before you finish entering the device code. If this happens, search for Remote.SSH: Connect Timeout and set it to 120. diff --git a/docs/hpc/09_ood/03_matlab_proxy.mdx b/docs/hpc/09_ood/03_matlab_proxy.mdx index 529f5df35a..abcbc72397 100644 --- a/docs/hpc/09_ood/03_matlab_proxy.mdx +++ b/docs/hpc/09_ood/03_matlab_proxy.mdx @@ -19,10 +19,10 @@ Please be aware that when you run each version of Matlab for the first time, the Be careful not to go over your quota for `/home`. You can find your current usage with the `myquota` command. Please see our [Storage documentation](../03_storage/01_intro_and_data_management.mdx) for details about your storage options. ::: Each time you start it up after that it will set its working directory to the last directory you were in. If you'd like to change this behavior, so that you always start at the same directory: -1. click on `ENVIRONMENT` in your `Home` panel -1. select `Preferences` -1. select `Current Folder` -1. select `initial working folder preferences` +1. click on `ENVIRONMENT` in your `Home` panel +1. select `Preferences` +1. select `Current Folder` +1. select `initial working folder preferences` This will allow you to set the full path of the initial working folder you would prefer. Be sure to hit the `Apply` button, so your changes are applied. :::: diff --git a/docs/hpc/12_tutorial_intro_shell_hpc/03_moving_looking.mdx b/docs/hpc/12_tutorial_intro_shell_hpc/03_moving_looking.mdx index ef58722788..d24da3c71e 100644 --- a/docs/hpc/12_tutorial_intro_shell_hpc/03_moving_looking.mdx +++ b/docs/hpc/12_tutorial_intro_shell_hpc/03_moving_looking.mdx @@ -42,10 +42,10 @@ $ whoami More specifically, when we type `whoami` in the shell: -1. finds a program called whoami, -1. runs that program, -1. displays that program’s output, then -1. displays a new prompt to tell us that it’s ready for more commands. +1. finds a program called whoami, +1. runs that program, +1. displays that program’s output, then +1. displays a new prompt to tell us that it’s ready for more commands. Next, let’s find out where we are by running a command called `pwd` (which stands for “print working directory”). (“Directory” is another word for “folder”). At any moment, our current working directory (where we are) is the directory that the computer assumes we want to run commands in unless we explicitly specify something else. Here, the computer’s response is `/home/`, which is ``'s home directory. Note that the location of your home directory may differ from system to system. ```bash @@ -64,7 +64,7 @@ $ ls :::info[**Differences between remote and local system**] Open a second terminal window on your local computer and run the `ls` command without logging in remotely. What differences do you see?
-**[click to see the solution]** +**\[click to see the solution\]** :::
@@ -236,7 +236,7 @@ Try 'ls --help' for more information. :::info[Looking at documentation] Looking at the man page for `ls` or using `ls --help`, what does the `-h` (`--human-readable`) option do? ::: -**[Click for Solution]** +**\[Click for Solution\]** :::tip[Solution] When used with the `-l` option, use unit suffixes: Byte, Kilobyte, Megabyte, Gigabyte, Terabyte and Petabyte in order to reduce the number of digits to four or fewer using base 2 for sizes. This option is not defined in IEEE Std 1003.1-2008 (“POSIX.1”). @@ -248,28 +248,28 @@ When used with the `-l` option, use unit suffixes: Byte, Kilobyte, Megabyte, Gig :::info[Absolute vs Relative Paths] Starting from `/Users/amanda/data/`, which of the following commands could Amanda use to navigate to her home directory, which is `/Users/amanda`? -1. `cd .` -1. `cd /` -1. `cd /home/amanda` -1. `cd ../..` -1. `cd ~` -1. `cd home` -1. `cd ~/data/..` -1. `cd` -1. `cd ..` +1. `cd .` +1. `cd /` +1. `cd /home/amanda` +1. `cd ../..` +1. `cd ~` +1. `cd home` +1. `cd ~/data/..` +1. `cd` +1. `cd ..` ::: -**[Click for Solution]** +**\[Click for Solution\]** :::tip[Solution] -1. No: `.` stands for the current directory. -1. No: `/` stands for the root directory. -1. No: Amanda’s home directory is `/Users/amanda`. -1. No: this goes up two levels, i.e. ends in `/Users`. -1. Yes: `~` stands for the user’s home directory, in this case `/Users/amanda`. -1. No: this would navigate into a directory home in the current directory if it exists. -1. Yes: unnecessarily complicated, but correct. -1. Yes: shortcut to go back to the user’s home directory. -1. Yes: goes up one level. +1. No: `.` stands for the current directory. +1. No: `/` stands for the root directory. +1. No: Amanda’s home directory is `/Users/amanda`. +1. No: this goes up two levels, i.e. ends in `/Users`. +1. Yes: `~` stands for the user’s home directory, in this case `/Users/amanda`. +1. No: this would navigate into a directory home in the current directory if it exists. +1. Yes: unnecessarily complicated, but correct. +1. Yes: shortcut to go back to the user’s home directory. +1. Yes: goes up one level. ::: @@ -278,10 +278,10 @@ Starting from `/Users/amanda/data/`, which of the following commands could Amand :::info[Relative Path Resolution] Using the filesystem diagram below, if `pwd` displays `/Users/thing`, what will `ls -F ../backup` display? -1. `../backup: No such file or directory` -1. `2012-12-01 2013-01-08 2013-01-27` -1. `2012-12-01/ 2013-01-08/ 2013-01-27/` -1. `original/ pnas_final/ pnas_sub/` +1. `../backup: No such file or directory` +1. `2012-12-01 2013-01-08 2013-01-27` +1. `2012-12-01/ 2013-01-08/ 2013-01-27/` +1. `original/ pnas_final/ pnas_sub/` ::: ```mermaid @@ -305,13 +305,13 @@ block-beta d --> i d --> j ``` -**[Click for Solution]** +**\[Click for Solution\]** :::tip[Solution] -1. No: there is a directory backup in `/Users`. -1. No: this is the content of `Users/thing/backup`, but with `..` we asked for one level further up. -1. No: see previous explanation. -1. Yes: `../backup/` refers to `/Users/backup/`. +1. No: there is a directory backup in `/Users`. +1. No: this is the content of `Users/thing/backup`, but with `..` we asked for one level further up. +1. No: see previous explanation. +1. Yes: `../backup/` refers to `/Users/backup/`. ::: @@ -322,18 +322,18 @@ Assuming a directory structure as in the above figure, if `pwd` displays `/Users ::::info[Output] pnas_sub/ pnas_final/ original/ :::: -1. `ls pwd` -1. `ls -r -F` -1. `ls -r -F /Users/backup` -1. Either #2 or #3 above, but not #1. +1. `ls pwd` +1. `ls -r -F` +1. `ls -r -F /Users/backup` +1. Either #2 or #3 above, but not #1. -**[Click for Solution]** +**\[Click for Solution\]** :::tip[Solution] -1. No: `pwd` is not the name of a directory. -1. Yes: `ls` without directory argument lists files and directories in the current directory. -1. Yes: uses the absolute path explicitly. -1. Correct: see explanations above. +1. No: `pwd` is not the name of a directory. +1. Yes: `ls` without directory argument lists files and directories in the current directory. +1. Yes: uses the absolute path explicitly. +1. Correct: see explanations above. ::: @@ -343,7 +343,7 @@ pnas_sub/ pnas_final/ original/ What does the command ls do when used with the `-l` and `-h` arguments? Some of its output is about properties that we do not cover in this lesson (such as file permissions and ownership), but the rest should be useful nevertheless. -
**[Click for Solution]** +
**\[Click for Solution\]** ::: :::tip[Solution] @@ -360,7 +360,7 @@ The command `ls -t` lists things by time of last change, with most recently chan In what order does `ls -R -t` display things? **Hint:** `ls -l` uses a long listing format to view timestamps. ::: -**[Click for Solution]** +**\[Click for Solution\]** :::tip[Solution] The directories are listed alphabetical at each level, the files/directories in each directory are sorted by time of last change. diff --git a/docs/hpc/12_tutorial_intro_shell_hpc/04_writing_reading_files.mdx b/docs/hpc/12_tutorial_intro_shell_hpc/04_writing_reading_files.mdx index 20c052f9c5..723b5edff6 100644 --- a/docs/hpc/12_tutorial_intro_shell_hpc/04_writing_reading_files.mdx +++ b/docs/hpc/12_tutorial_intro_shell_hpc/04_writing_reading_files.mdx @@ -216,18 +216,18 @@ Install wget - Fedora: `sudo dnf install wget` - **macOS**: `brew install wget` - **Windows**: - 1. Download the Wget executable (wget.exe) from a reliable source. - 1. Place the `wget.exe` file in a directory that's included in your system's PATH environment variable (e.g., `C:\Windows\System32`). - 1. Open a command prompt and verify the installation by running `wget --version` + 1. Download the Wget executable (wget.exe) from a reliable source. + 1. Place the `wget.exe` file in a directory that's included in your system's PATH environment variable (e.g., `C:\Windows\System32`). + 1. Open a command prompt and verify the installation by running `wget --version`
Install cURL - **Linux**: curl is packaged for every major distribution. You can install it through the usual means. - - Debian, Ubuntu, Mint: `sudo apt install curl` - - CentOS, Red Hat: `sudo yum install curl` or `zypper install curl` - - Fedora: `sudo dnf install curl` + - Debian, Ubuntu, Mint: `sudo apt install curl` + - CentOS, Red Hat: `sudo yum install curl` or `zypper install curl` + - Fedora: `sudo dnf install curl` - **macOS**: curl is preinstalled on macOS. If you must have the latest version you can brew install it, but only do so if the stock version has failed you. - **Windows**: - curl comes preinstalled for the Windows 10 command line. diff --git a/docs/hpc/12_tutorial_intro_shell_hpc/05_wildcards_pipes.mdx b/docs/hpc/12_tutorial_intro_shell_hpc/05_wildcards_pipes.mdx index e7206c3e29..2e8b97ee1f 100644 --- a/docs/hpc/12_tutorial_intro_shell_hpc/05_wildcards_pipes.mdx +++ b/docs/hpc/12_tutorial_intro_shell_hpc/05_wildcards_pipes.mdx @@ -109,7 +109,7 @@ $ wc -l * :::info[Multiple wildcards] You can even use multiple *s at a time. How would you run wc -l on every file with “fb” in it? -
**[Click for Solution]** +
**\[Click for Solution\]** :::
:::tip[Solution] @@ -124,7 +124,7 @@ i.e. *anything or nothing* then `fb` then *anything or nothing* :::info[Using other commands] Now let’s try cleaning up our working directory a bit. Create a folder called “fastq” and move all of our .fastq files there in one `mv` command. -
**[Click for Solution]** +
**\[Click for Solution\]** :::
:::tip[Solution] @@ -234,7 +234,7 @@ This is just the same as redirecting output to a file, then reading the number o :::info[Writing commands using pipes] How many files are there in the “fastq” directory we made earlier? (Use the shell to do this.) ::: -**[Click for Solution]** +**\[Click for Solution\]** :::tip[Solution] ```bash @@ -252,7 +252,7 @@ Let’s compress one of our files using `gzip`. $ gzip gene_association.fb ``` `zcat` acts like `cat`, except that it can read information from `.gz` (compressed) files. Using `zcat`, can you write a command to take a look at the top few lines of the `gene_association.fb.gz` file (without decompressing the file itself)?
-**[Click for Solution]** +**\[Click for Solution\]** ::: :::tip[Solution] diff --git a/docs/hpc/12_tutorial_intro_shell_hpc/06_scripts_variables_loops.mdx b/docs/hpc/12_tutorial_intro_shell_hpc/06_scripts_variables_loops.mdx index 87085de9f6..c0839bd653 100644 --- a/docs/hpc/12_tutorial_intro_shell_hpc/06_scripts_variables_loops.mdx +++ b/docs/hpc/12_tutorial_intro_shell_hpc/06_scripts_variables_loops.mdx @@ -298,7 +298,7 @@ gene_association.fb.gz `cd` to our `fastq` directory from earlier and write a loop to print off the name and top 4 lines of every fastq file in that directory. Is there a way to only run the loop on fastq files ending in _1.fastq?
-**[Click for Solution]** +**\[Click for Solution\]** ::: :::tip[Solution] @@ -326,7 +326,7 @@ $ echo ${FILE}.example stuff.txt.example ``` Can you write a script that prints off the name of every file in a directory with `.processed` added to it?
-**[Click for Solution]** +**\[Click for Solution\]** ::: ::::tip[Solution] @@ -381,7 +381,7 @@ $ ls -l example ``` How might we give ourselves permission to do everything with a file, but allow no one else to do anything with it.
-**[Click for Solution]** +**\[Click for Solution\]** ::: :::tip[Solution] diff --git a/docs/hpc/13_tutorial_intro_hpc/03_exploring_remote_resources.mdx b/docs/hpc/13_tutorial_intro_hpc/03_exploring_remote_resources.mdx index cf7740c68b..63b465abda 100644 --- a/docs/hpc/13_tutorial_intro_hpc/03_exploring_remote_resources.mdx +++ b/docs/hpc/13_tutorial_intro_hpc/03_exploring_remote_resources.mdx @@ -27,7 +27,7 @@ Take a look at your home directory on the remote system: :::info[What’s different between your machine and the remote?] Open a second terminal window on your local computer and run the `ls` command (without logging in to Torch). What differences do you see?
-**[Click for Solution]** +**\[Click for Solution\]** :::
:::tip[Solution] @@ -164,7 +164,7 @@ Note that, if you’re logged in to the remote computer cluster, you need to log [NYUNetID@log-1 ~]$ exit [user@laptop ~]$ ``` -**[Click for Solution]** +**\[Click for Solution\]** ::: :::tip[Solution] @@ -192,7 +192,7 @@ More detailed information can be found on the command line: :::info[Explore the Login Node] Now compare the resources of your computer with those of the login node.
-**[Click for Solution]** +**\[Click for Solution\]** :::
:::tip[Solution] @@ -230,7 +230,7 @@ Finally, let’s look at the resources available on the worker nodes where your :::info[Compare Your Computer, the Login Node and the Compute Node] Compare your laptop’s number of processors and memory with the numbers you see on the cluster login node and compute node. What implications do you think the differences might have on running your research work on the different systems and nodes?
-**[Click for Solution]** +**\[Click for Solution\]** :::
:::tip[Solution] diff --git a/docs/hpc/13_tutorial_intro_hpc/04_scheduler_fundamentals.mdx b/docs/hpc/13_tutorial_intro_hpc/04_scheduler_fundamentals.mdx index 24652899be..9aafbd6b3e 100644 --- a/docs/hpc/13_tutorial_intro_hpc/04_scheduler_fundamentals.mdx +++ b/docs/hpc/13_tutorial_intro_hpc/04_scheduler_fundamentals.mdx @@ -27,10 +27,10 @@ The most basic use of the scheduler is to run a command non-interactively. Any c In this case, the job we want to run is a shell script – essentially a text file containing a list of UNIX commands to be executed in a sequential manner. Our shell script will have three parts: -1. On the very first line, add `#!/bin/bash`. The `#!` (pronounced “hash-bang” or “shebang”) tells the computer what program is meant to process the contents of this file. In this case, we are telling it that the commands that follow are written for the command-line shell (what we’ve been doing everything in so far). -1. Anywhere below the first line, we’ll add an `echo` command with a friendly greeting. When run, the shell script will print whatever comes after `echo` in the terminal. - - `echo -n` will print everything that follows, *without* ending the line by printing the new-line character. -1. On the last line, we’ll invoke the `hostname` command, which will print the name of the machine the script is run on. +1. On the very first line, add `#!/bin/bash`. The `#!` (pronounced “hash-bang” or “shebang”) tells the computer what program is meant to process the contents of this file. In this case, we are telling it that the commands that follow are written for the command-line shell (what we’ve been doing everything in so far). +1. Anywhere below the first line, we’ll add an `echo` command with a friendly greeting. When run, the shell script will print whatever comes after `echo` in the terminal. + - `echo -n` will print everything that follows, *without* ending the line by printing the new-line character. +1. On the last line, we’ll invoke the `hostname` command, which will print the name of the machine the script is run on. ```bash [NetID@log-1 ~]$ nano example-job.sh ``` @@ -46,7 +46,7 @@ hostname :::info[Creating Our Test Job] Run the script. Does it execute on the cluster or just our login node? ::: -**[Click for Solution]** +**\[Click for Solution\]** :::tip[Solution] ```bash @@ -118,7 +118,7 @@ It’s best if your requests accurately reflect your job’s requirements. We’ :::info[Submitting Resource Requests] Modify our `hostname` script so that it runs for a minute, then submit a job for it on the cluster.
-**[Click for Solution]** +**\[Click for Solution\]** :::
:::tip[Solution] @@ -191,7 +191,7 @@ Try submitting multiple jobs and then cancelling them all with `scancel -u NetID ## Job Arrays > Job arrays offer a mechanism for submitting and managing collections of similar jobs quickly and easily, useful for repetitive workloads that follow a common job pattern. This greatly improves overall performance, since job arrays with millions of tasks can be submitted in milliseconds (subject to configured size limits) and the scheduler can quickly identify cases when no more array tasks are eligible to start.
--- [Slurm documentation](https://slurm.schedmd.com/job_array.html) +> -- [Slurm documentation](https://slurm.schedmd.com/job_array.html) ### Job Array Example As stated above, you can have a single sbatch job submit multiple jobs by using Job Arrays. This example shows how you can run the same python file with a range of input parameters from a single sbatch file. diff --git a/docs/hpc/13_tutorial_intro_hpc/05_environment_variables.mdx b/docs/hpc/13_tutorial_intro_hpc/05_environment_variables.mdx index 5f3004afd5..89657c4a0b 100644 --- a/docs/hpc/13_tutorial_intro_hpc/05_environment_variables.mdx +++ b/docs/hpc/13_tutorial_intro_hpc/05_environment_variables.mdx @@ -108,7 +108,7 @@ Set a shell variable `TIME_STYLE` to have a value of `iso` and check this value Now, run the command `ls` with the option `-l` (which gives a long format). `export` the variable and rerun the `ls -l` command. Do you notice any difference?
-**[Click for Solution]** +**\[Click for Solution\]** ::: :::tip[Solution] @@ -122,7 +122,7 @@ You can see the complete set of environment variables in your current shell sess :::info[Job environment variables] When Slurm runs a job, it sets a number of environment variables for the job. One of these will let us check what directory our job script was submitted from. The `SLURM_SUBMIT_DIR` variable is set to the directory from which our job was submitted. Using the `SLURM_SUBMIT_DIR` variable, modify your job so that it prints out the location from which the job was submitted.
-**[Click for Solution]** +**\[Click for Solution\]** :::
:::tip[Solution] diff --git a/docs/hpc/13_tutorial_intro_hpc/06_modules.mdx b/docs/hpc/13_tutorial_intro_hpc/06_modules.mdx index 2ec8ae8da3..dfd9c488f8 100644 --- a/docs/hpc/13_tutorial_intro_hpc/06_modules.mdx +++ b/docs/hpc/13_tutorial_intro_hpc/06_modules.mdx @@ -1,11 +1,11 @@ # Accessing Software via Modules :::info[Overview] Questions -- How do we load and unload software packages? +- How do we load and unload software packages? Objectives -- Load and use a software package. -- Explain how the shell environment changes when the module mechanism loads or unloads packages. +- Load and use a software package. +- Explain how the shell environment changes when the module mechanism loads or unloads packages. ::: On a high-performance computing system, it is seldom the case that the software we want to use is available when we log in. It is installed, but we will need to “load” it before it can run. @@ -194,7 +194,7 @@ To load a software module we must specify the full module name: :::info[Using Software Modules in Scripts] Create a job that is able to run `R --version`. Remember, no software is loaded by default! Running a job is just like logging on to the system (you should not assume a module loaded on the login node is loaded on a compute node).
-**[Click for Solution]** +**\[Click for Solution\]** :::
:::tip[Solution] diff --git a/docs/hpc/13_tutorial_intro_hpc/07_transferring_files_remote.mdx b/docs/hpc/13_tutorial_intro_hpc/07_transferring_files_remote.mdx index 2028378bc9..178eaa643c 100644 --- a/docs/hpc/13_tutorial_intro_hpc/07_transferring_files_remote.mdx +++ b/docs/hpc/13_tutorial_intro_hpc/07_transferring_files_remote.mdx @@ -27,7 +27,7 @@ The word “tarball” in the above URL refers to a compressed archive format co You may also see the extension `.tgz`, which is just an abbreviation of `.tar.gz`. By default, `curl` and `wget` download files to the same name as the URL: in this case, `main`. Use one of the above commands to save the tarball as `amdahl.tar.gz`.
-**[Click for Solution]** +**\[Click for Solution\]** ::: :::tip[wget and curl Commands] @@ -211,7 +211,7 @@ Say we have to connect `rsync` through port 768 instead of 22. How would we modi [user@laptop ~]$ rsync amdahl.tar.gz NetID@login.torch.hpc.nyu.edu: ``` Hint: check the `man` page or “help” for `rsync`.
-**[Click for Solution]** +**\[Click for Solution\]** ::: ::::tip[Solution] @@ -295,15 +295,15 @@ Say you have a “data” folder containing 10,000 or so files, a healthy mix of ```bash [user@laptop ~]$ rsync -ra data.tar.gz NYUNetID@login.torch.hpc.nyu.edu:~/ ``` -**[Click for Solution]** +**\[Click for Solution\]** ::: :::tip[Solution] -1. `scp` will recursively copy the directory. This works, but without compression. -1. `rsync -ra` works like `scp -r`, but preserves file information like creation times. This is marginally better. -1. `rsync -raz` adds compression, which will save some bandwidth. If you have a strong CPU at both ends of the line, and you’re on a slow network, this is a good choice. -1. This command first uses `tar` to merge everything into a single file, then `rsync -z` to transfer it with compression. If you have a large number of files, metadata overhead can hamper your transfer, so this is a good idea. -1. This command uses `tar -z` to compress the archive, then `rsync` to transfer it. This may perform similarly to the command directly above, but in most cases (for large datasets), it’s the best combination of high throughput and low latency (making the most of your time and network connection). +1. `scp` will recursively copy the directory. This works, but without compression. +1. `rsync -ra` works like `scp -r`, but preserves file information like creation times. This is marginally better. +1. `rsync -raz` adds compression, which will save some bandwidth. If you have a strong CPU at both ends of the line, and you’re on a slow network, this is a good choice. +1. This command first uses `tar` to merge everything into a single file, then `rsync -z` to transfer it with compression. If you have a large number of files, metadata overhead can hamper your transfer, so this is a good idea. +1. This command uses `tar -z` to compress the archive, then `rsync` to transfer it. This may perform similarly to the command directly above, but in most cases (for large datasets), it’s the best combination of high throughput and low latency (making the most of your time and network connection). :::
diff --git a/docs/hpc/13_tutorial_intro_hpc/08_running_parallel_job.mdx b/docs/hpc/13_tutorial_intro_hpc/08_running_parallel_job.mdx index bd2093592a..3329668372 100644 --- a/docs/hpc/13_tutorial_intro_hpc/08_running_parallel_job.mdx +++ b/docs/hpc/13_tutorial_intro_hpc/08_running_parallel_job.mdx @@ -116,7 +116,7 @@ Use `ls` to locate the output file. The `-t` flag sorts in reverse-chronological
:::info[Read the Job Output] -**[Click for Output]** +**\[Click for Output\]** ::: :::tip[Output] @@ -199,7 +199,7 @@ Total execution time (according to rank 0): 10.888 seconds :::info[Is it 4× faster?] The parallel job received 4× more processors than the serial job: does that mean it finished in ¼ the time?
-**[Click for Solution]** +**\[Click for Solution\]** :::
:::tip[Solution] diff --git a/docs/hpc/13_tutorial_intro_hpc/09_using_resources_effectively.mdx b/docs/hpc/13_tutorial_intro_hpc/09_using_resources_effectively.mdx index 6ee5c74db4..a725ae7cc9 100644 --- a/docs/hpc/13_tutorial_intro_hpc/09_using_resources_effectively.mdx +++ b/docs/hpc/13_tutorial_intro_hpc/09_using_resources_effectively.mdx @@ -53,7 +53,7 @@ From the job history, we see that `amdahl` jobs finished executing in at most a Edit `parallel_job.sh` to set a better time estimate. How close can you get? Hint: use `-t`.
-**[Click for Solution]** +**\[Click for Solution\]** ::: :::tip[Solution] diff --git a/docs/hpc/13_tutorial_intro_hpc/10_using_resources_responsibly.mdx b/docs/hpc/13_tutorial_intro_hpc/10_using_resources_responsibly.mdx index f6b6dac8b3..50758eb1fa 100644 --- a/docs/hpc/13_tutorial_intro_hpc/10_using_resources_responsibly.mdx +++ b/docs/hpc/13_tutorial_intro_hpc/10_using_resources_responsibly.mdx @@ -40,7 +40,7 @@ Which of these commands would be a routine task to run on the login node? - `molecular_dynamics_2` - `tar -xzf R-3.3.0.tar.gz` -**[Click for Solution]** +**\[Click for Solution\]** ::: ::::tip[Solution] diff --git a/docs/hpc/14_tutorial_apptainer/02_running_containers.mdx b/docs/hpc/14_tutorial_apptainer/02_running_containers.mdx index 2628e27dcb..5944b619ab 100644 --- a/docs/hpc/14_tutorial_apptainer/02_running_containers.mdx +++ b/docs/hpc/14_tutorial_apptainer/02_running_containers.mdx @@ -68,10 +68,10 @@ Both `apptainer run` and `apptainer exec` start a container, but they serve diff ## Opening an Interactive Shell Within a Container There are many reasons why you might want to use a container interactively. -- debugging (software, bind mounts, hardware integrations, etc.) -- testing software upgrades -- rapid Software Prototyping -- data exploration +- debugging (software, bind mounts, hardware integrations, etc.) +- testing software upgrades +- rapid Software Prototyping +- data exploration Apptainer provides the `apptainer shell` command for this purpose. diff --git a/package.json b/package.json index 77ec84e856..c0b20a7006 100644 --- a/package.json +++ b/package.json @@ -57,6 +57,7 @@ "prettier": "^3.9.4", "prettier-plugin-jsdoc": "^1.8.1", "remark-directive": "^3.0.0", + "remark-frontmatter": "^4.0.1", "stylelint": "^17.14.0", "stylelint-config-rational-order": "^0.1.2", "stylelint-config-standard": "^40.0.0", @@ -80,6 +81,7 @@ "plugins": [ "remark-lint", "remark-directive", + "remark-frontmatter", [ "remark-lint-no-undefined-references" ] diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 17f725ae2f..35a7549122 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -114,6 +114,9 @@ importers: remark-directive: specifier: ^3.0.0 version: 3.0.1(supports-color@10.2.2) + remark-frontmatter: + specifier: ^4.0.1 + version: 4.0.1 stylelint: specifier: ^17.14.0 version: 17.14.0(supports-color@10.2.2)(typescript@5.9.3) @@ -2754,6 +2757,9 @@ packages: '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + '@types/mdast@3.0.15': + resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} + '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} @@ -6111,6 +6117,9 @@ packages: mdast-util-from-markdown@2.0.3: resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==} + mdast-util-frontmatter@1.0.1: + resolution: {integrity: sha512-JjA2OjxRqAa8wEG8hloD0uTU0kdn8kbtOWpPP94NBkfAlbxn4S8gCGf/9DwFtEeGPXrDcNXdiDjVaRdUFqYokw==} + mdast-util-frontmatter@2.0.1: resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==} @@ -6144,15 +6153,24 @@ packages: mdast-util-mdxjs-esm@2.0.1: resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} + mdast-util-phrasing@3.0.1: + resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==} + mdast-util-phrasing@4.1.0: resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} mdast-util-to-hast@13.2.1: resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} + mdast-util-to-markdown@1.5.0: + resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==} + mdast-util-to-markdown@2.1.2: resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} + mdast-util-to-string@3.2.0: + resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} + mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} @@ -6208,6 +6226,9 @@ packages: micromark-extension-directive@3.0.2: resolution: {integrity: sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==} + micromark-extension-frontmatter@1.1.1: + resolution: {integrity: sha512-m2UH9a7n3W8VAH9JO9y01APpPKmNNNs71P0RbknEmYSaZU5Ghogv38BYO94AI5Xw6OYfxZRdHZZ2nYjs/Z+SZQ==} + micromark-extension-frontmatter@2.0.0: resolution: {integrity: sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==} @@ -6283,9 +6304,15 @@ packages: micromark-util-combine-extensions@2.0.1: resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + micromark-util-decode-numeric-character-reference@1.1.0: + resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} + micromark-util-decode-numeric-character-reference@2.0.2: resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + micromark-util-decode-string@1.1.0: + resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} + micromark-util-decode-string@2.0.1: resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} @@ -7617,6 +7644,9 @@ packages: resolution: {integrity: sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + remark-frontmatter@4.0.1: + resolution: {integrity: sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==} + remark-frontmatter@5.0.0: resolution: {integrity: sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==} @@ -8586,6 +8616,9 @@ packages: resolution: {integrity: sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==} engines: {node: '>=20'} + unified@10.1.2: + resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} + unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -8609,6 +8642,9 @@ packages: unist-util-is@3.0.0: resolution: {integrity: sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==} + unist-util-is@5.2.1: + resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} + unist-util-is@6.0.1: resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} @@ -8624,18 +8660,27 @@ packages: unist-util-stringify-position@1.1.2: resolution: {integrity: sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==} + unist-util-stringify-position@3.0.3: + resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} + unist-util-stringify-position@4.0.0: resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} unist-util-visit-parents@2.1.2: resolution: {integrity: sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==} + unist-util-visit-parents@5.1.3: + resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} + unist-util-visit-parents@6.0.2: resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} unist-util-visit@1.4.1: resolution: {integrity: sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==} + unist-util-visit@4.1.2: + resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} + unist-util-visit@5.1.0: resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} @@ -8752,12 +8797,18 @@ packages: vfile-message@1.1.1: resolution: {integrity: sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==} + vfile-message@3.1.4: + resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} + vfile-message@4.0.3: resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} vfile@3.0.1: resolution: {integrity: sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ==} + vfile@5.3.7: + resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} + vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} @@ -12743,6 +12794,10 @@ snapshots: '@types/json5@0.0.29': {} + '@types/mdast@3.0.15': + dependencies: + '@types/unist': 2.0.11 + '@types/mdast@4.0.4': dependencies: '@types/unist': 3.0.3 @@ -16457,6 +16512,12 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-frontmatter@1.0.1: + dependencies: + '@types/mdast': 3.0.15 + mdast-util-to-markdown: 1.5.0 + micromark-extension-frontmatter: 1.1.1 + mdast-util-frontmatter@2.0.1(supports-color@10.2.2): dependencies: '@types/mdast': 4.0.4 @@ -16574,6 +16635,11 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-phrasing@3.0.1: + dependencies: + '@types/mdast': 3.0.15 + unist-util-is: 5.2.1 + mdast-util-phrasing@4.1.0: dependencies: '@types/mdast': 4.0.4 @@ -16591,6 +16657,17 @@ snapshots: unist-util-visit: 5.1.0 vfile: 6.0.3 + mdast-util-to-markdown@1.5.0: + dependencies: + '@types/mdast': 3.0.15 + '@types/unist': 2.0.11 + longest-streak: 3.1.0 + mdast-util-phrasing: 3.0.1 + mdast-util-to-string: 3.2.0 + micromark-util-decode-string: 1.1.0 + unist-util-visit: 4.1.2 + zwitch: 2.0.4 + mdast-util-to-markdown@2.1.2: dependencies: '@types/mdast': 4.0.4 @@ -16603,6 +16680,10 @@ snapshots: unist-util-visit: 5.1.0 zwitch: 2.0.4 + mdast-util-to-string@3.2.0: + dependencies: + '@types/mdast': 3.0.15 + mdast-util-to-string@4.0.0: dependencies: '@types/mdast': 4.0.4 @@ -16709,6 +16790,13 @@ snapshots: micromark-util-types: 2.0.2 parse-entities: 4.0.2 + micromark-extension-frontmatter@1.1.1: + dependencies: + fault: 2.0.1 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + micromark-extension-frontmatter@2.0.0: dependencies: fault: 2.0.1 @@ -16899,10 +16987,21 @@ snapshots: micromark-util-chunked: 2.0.1 micromark-util-types: 2.0.2 + micromark-util-decode-numeric-character-reference@1.1.0: + dependencies: + micromark-util-symbol: 1.1.0 + micromark-util-decode-numeric-character-reference@2.0.2: dependencies: micromark-util-symbol: 2.0.1 + micromark-util-decode-string@1.1.0: + dependencies: + decode-named-character-reference: 1.3.0 + micromark-util-character: 1.2.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-decode-string@2.0.1: dependencies: decode-named-character-reference: 1.3.0 @@ -18368,6 +18467,13 @@ snapshots: node-emoji: 2.2.0 unified: 11.0.5 + remark-frontmatter@4.0.1: + dependencies: + '@types/mdast': 3.0.15 + mdast-util-frontmatter: 1.0.1 + micromark-extension-frontmatter: 1.1.1 + unified: 10.1.2 + remark-frontmatter@5.0.0(supports-color@10.2.2): dependencies: '@types/mdast': 4.0.4 @@ -19539,6 +19645,16 @@ snapshots: unicorn-magic@0.4.0: {} + unified@10.1.2: + dependencies: + '@types/unist': 2.0.11 + bail: 2.0.2 + extend: 3.0.2 + is-buffer: 2.0.5 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 5.3.7 + unified@11.0.5: dependencies: '@types/unist': 3.0.3 @@ -19579,6 +19695,10 @@ snapshots: unist-util-is@3.0.0: {} + unist-util-is@5.2.1: + dependencies: + '@types/unist': 2.0.11 + unist-util-is@6.0.1: dependencies: '@types/unist': 3.0.3 @@ -19597,6 +19717,10 @@ snapshots: unist-util-stringify-position@1.1.2: {} + unist-util-stringify-position@3.0.3: + dependencies: + '@types/unist': 2.0.11 + unist-util-stringify-position@4.0.0: dependencies: '@types/unist': 3.0.3 @@ -19605,6 +19729,11 @@ snapshots: dependencies: unist-util-is: 3.0.0 + unist-util-visit-parents@5.1.3: + dependencies: + '@types/unist': 2.0.11 + unist-util-is: 5.2.1 + unist-util-visit-parents@6.0.2: dependencies: '@types/unist': 3.0.3 @@ -19614,6 +19743,12 @@ snapshots: dependencies: unist-util-visit-parents: 2.1.2 + unist-util-visit@4.1.2: + dependencies: + '@types/unist': 2.0.11 + unist-util-is: 5.2.1 + unist-util-visit-parents: 5.1.3 + unist-util-visit@5.1.0: dependencies: '@types/unist': 3.0.3 @@ -19747,6 +19882,11 @@ snapshots: dependencies: unist-util-stringify-position: 1.1.2 + vfile-message@3.1.4: + dependencies: + '@types/unist': 2.0.11 + unist-util-stringify-position: 3.0.3 + vfile-message@4.0.3: dependencies: '@types/unist': 3.0.3 @@ -19759,6 +19899,13 @@ snapshots: unist-util-stringify-position: 1.1.2 vfile-message: 1.1.1 + vfile@5.3.7: + dependencies: + '@types/unist': 2.0.11 + is-buffer: 2.0.5 + unist-util-stringify-position: 3.0.3 + vfile-message: 3.1.4 + vfile@6.0.3: dependencies: '@types/unist': 3.0.3