diff --git a/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg b/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg deleted file mode 100644 index 11bda092..00000000 Binary files a/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg and /dev/null differ diff --git a/blog/2021-08-26-welcome/CodeRabbitSecurity.jpg b/blog/2023-08-26-welcome/CodeRabbitSecurity.jpg similarity index 100% rename from blog/2021-08-26-welcome/CodeRabbitSecurity.jpg rename to blog/2023-08-26-welcome/CodeRabbitSecurity.jpg diff --git a/blog/2021-08-26-welcome/coderabbit-openai-rate-limit-exceed.png b/blog/2023-08-26-welcome/coderabbit-openai-rate-limit-exceed.png similarity index 100% rename from blog/2021-08-26-welcome/coderabbit-openai-rate-limit-exceed.png rename to blog/2023-08-26-welcome/coderabbit-openai-rate-limit-exceed.png diff --git a/blog/2021-08-26-welcome/2023-09-25-coderabbit-deep-dive.md b/blog/2023-08-26-welcome/index.md similarity index 99% rename from blog/2021-08-26-welcome/2023-09-25-coderabbit-deep-dive.md rename to blog/2023-08-26-welcome/index.md index 53f4aa1d..b32e6fd4 100644 --- a/blog/2021-08-26-welcome/2023-09-25-coderabbit-deep-dive.md +++ b/blog/2023-08-26-welcome/index.md @@ -5,6 +5,7 @@ description: AI and the Future of Code Reviews - A Deep Dive into CodeRabbit authors: [gur, vishu] tags: ["Rate limits", "Openai", "Prioritization"] image: /img/blogs/founder_blog_meta.jpeg +hide_table_of_contents: false --- @@ -81,7 +82,7 @@ CodeRabbit is built on top of the generative AI to provide the following key cap The review process is multi-stage and shown in the figure below. CodeRabbit's workflow is triggered when a developer opens a pull request or commits code to an existing pull request. This is followed by various summarization and review stages. -![](./CodeRabbitDesign.jpg) +![](../img/CodeRabbitDesign.jpg) CodeRabbit is not just a simple wrapper that does pass-through to the LLM models. To circumvent context size limits, CodeRabbit uses an innovative, multi-LLM and multi-stage approach to scale reviews for larger change sets. Unlike AI-based code completion tools, code reviews are a much more complex problem. The reviewer context is much broader than the developer context, as the reviewer needs to uncover not just obvious issues but also understand the larger context of the pull request and changes across multiple files. Below is a glimpse into the challenges we faced and the solutions we came up with: diff --git a/blog/2023-10-05-ai-code-reviews-reclaims.md b/blog/2023-10-05-ai-code-reviews-reclaims/2023-10-05-ai-code-reviews-reclaims.md similarity index 94% rename from blog/2023-10-05-ai-code-reviews-reclaims.md rename to blog/2023-10-05-ai-code-reviews-reclaims/2023-10-05-ai-code-reviews-reclaims.md index 2495d52d..75a178bd 100644 --- a/blog/2023-10-05-ai-code-reviews-reclaims.md +++ b/blog/2023-10-05-ai-code-reviews-reclaims/2023-10-05-ai-code-reviews-reclaims.md @@ -46,7 +46,7 @@ We'll discuss the regular stages of software projects and the impact of AI code ### The Typical Software Lifecycle Process -![](./2021-08-26-welcome/software-lifecycle.png) +![](software-lifecycle.png) Ah, the software lifecycle—the process where we turn ideas into lines of code that build our products. If you're an engineering manager, you're already well-versed in the dogma: planning, coding, testing, deploying, and maintaining. It's a continuous cycle with its own set of challenges. @@ -58,19 +58,19 @@ In the upcoming sections, we'll dive deeper into how the traditional and often c ### The Traditional Code Review Method -![](./2021-08-26-welcome/engineer.png) +![](engineer.png) In the conventional approach, code reviews followed this pattern: one developer wrote the code and then passed it on to another person for evaluation. The reviewer took their time to meticulously inspect the code submitted by the developer. This involved examining lines of code and making notes, comments, questions, and identifying any problems. This process typically unfolded as follows: -- A developer creates a Pull Request (PR) and outlines the changes made, requesting a review. -- The reviewer, who might be another developer or an engineering manager, assesses the code, looking for specific aspects such as: - - Ensuring that the PR changes align with the scope of the associated ticket(s). - - Confirming the accuracy of business logic implementation. - - Maintaining or improving code quality by reverting unnecessary changes and upholding code quality standards. - - Verifying that the changes do not introduce security vulnerabilities. -- The reviewer either approves or rejects the PR. -- If approved, the PR can be merged. -- If rejected, the reviewer provides feedback on the required updates for approval. +- A developer creates a Pull Request (PR) and outlines the changes made, requesting a review. +- The reviewer, who might be another developer or an engineering manager, assesses the code, looking for specific aspects such as: + - Ensuring that the PR changes align with the scope of the associated ticket(s). + - Confirming the accuracy of business logic implementation. + - Maintaining or improving code quality by reverting unnecessary changes and upholding code quality standards. + - Verifying that the changes do not introduce security vulnerabilities. +- The reviewer either approves or rejects the PR. +- If approved, the PR can be merged. +- If rejected, the reviewer provides feedback on the required updates for approval. This process has been a fundamental part of modern coding. It relies on the availability of both the reviewer to provide feedback and the developer to make changes based on that feedback. @@ -90,7 +90,7 @@ The following sections will delve into how these AI platforms streamline code re In code reviews, problems can happen even when everyone works in the same place. Sometimes, teams just agree without really checking. People might not get along, causing delays and making things tense. Plus, even if we try really hard, some issues can slip by us and turn into big, expensive problems like bugs or system crashes. So, we need better ways to catch these problems early. -Let's look at some numbers because engineering managers really like facts and figures. Studies tell us that developers spend around 20-30% of their time [doing code reviews](https://about.gitlab.com/blog/2021/09/03/the-code-review-struggle-is-real-heres-what-you-need-to-know/). There's even a study [here](https://smartbear.com/learn/code-review/best-practices-for-peer-code-review/#:~:text=Review%20fewer%20than%20400%20lines%20of%20code%20at%20a%20time,-A%20SmartBear%20study&text=The%20brain%20can%20only%20effectively,70%2D90%25%20defect%20discovery) that shows our brains struggle to review more than about 400 lines of code at once, making it harder to spot mistakes. +Let's look at some numbers because engineering managers really like facts and figures. Studies tell us that developers spend around 20-30% of their time [doing code reviews](https://about.gitlab.com/blog/2023/09/03/the-code-review-struggle-is-real-heres-what-you-need-to-know/). There's even a study [here](https://smartbear.com/learn/code-review/best-practices-for-peer-code-review/#:~:text=Review%20fewer%20than%20400%20lines%20of%20code%20at%20a%20time,-A%20SmartBear%20study&text=The%20brain%20can%20only%20effectively,70%2D90%25%20defect%20discovery) that shows our brains struggle to review more than about 400 lines of code at once, making it harder to spot mistakes. We all know time is super important. It doesn't just impact how much money the project makes, but it also affects how much your team gets paid and, in the big picture, how well the company does overall. When a big chunk of your developers' time is used up reviewing code, it's not just a tech thing anymore – it's a big deal for the whole business. @@ -102,7 +102,7 @@ In the next section, we'll understand how AI-powered code reviewers offer a more ### AI-Powered Code Reviews: This Changes Everything -![](./2021-08-26-welcome/ai-powered.png) +![](ai-powered.png) AI, or Artificial Intelligence, might sound like a trendy word, but in the world of reviewing computer code, it's not just a passing trend – it's a real game-changer. When we talk about AI in code review tools, we're not just talking about existing linters or static code analysis tools. Instead, we're referring to smart feedback that understands the context of your team's coding rules and the particular project you're working on. But there's more to it. These AI-powered systems can chat with you, making the review process feel like a collaboration rather than a machine. This means you can ask questions, seek clarifications, and even discuss the best approaches, all in real time. It's like having your most experienced developer, who knows your code inside and out, ready for reviews 24/7. diff --git a/blog/2021-08-26-welcome/ai-powered.png b/blog/2023-10-05-ai-code-reviews-reclaims/ai-powered.png similarity index 100% rename from blog/2021-08-26-welcome/ai-powered.png rename to blog/2023-10-05-ai-code-reviews-reclaims/ai-powered.png diff --git a/blog/2021-08-26-welcome/engineer.png b/blog/2023-10-05-ai-code-reviews-reclaims/engineer.png similarity index 100% rename from blog/2021-08-26-welcome/engineer.png rename to blog/2023-10-05-ai-code-reviews-reclaims/engineer.png diff --git a/blog/2021-08-26-welcome/software-lifecycle.png b/blog/2023-10-05-ai-code-reviews-reclaims/software-lifecycle.png similarity index 100% rename from blog/2021-08-26-welcome/software-lifecycle.png rename to blog/2023-10-05-ai-code-reviews-reclaims/software-lifecycle.png diff --git a/blog/2023-10-23-coderabbit-openai-rate-limits.md b/blog/2023-10-23-coderabbit-openai-rate-limits/2023-10-23-coderabbit-openai-rate-limits.md similarity index 60% rename from blog/2023-10-23-coderabbit-openai-rate-limits.md rename to blog/2023-10-23-coderabbit-openai-rate-limits/2023-10-23-coderabbit-openai-rate-limits.md index b320eebb..e985a853 100644 --- a/blog/2023-10-23-coderabbit-openai-rate-limits.md +++ b/blog/2023-10-23-coderabbit-openai-rate-limits/2023-10-23-coderabbit-openai-rate-limits.md @@ -74,13 +74,13 @@ In our account, for example, we are allocated the following rate limits: We believe that the rate limits are in place for several reasons and are unlikely to change in the near future: -- Advanced models such as `gpt-4` are computationally intensive. Each request - can take several seconds or even minutes to process. For example, 30s response - time is fairly typical for complex tasks. OpenAI sets these limits to manage - aggregate load on their infrastructure and provide fair access to users. -- The demand for AI has outstripped the supply of available hardware, - particularly the GPUs required to run these models. It will take some time for - the industry to meet this exploding demand. +- Advanced models such as `gpt-4` are computationally intensive. Each request + can take several seconds or even minutes to process. For example, 30s response + time is fairly typical for complex tasks. OpenAI sets these limits to manage + aggregate load on their infrastructure and provide fair access to users. +- The demand for AI has outstripped the supply of available hardware, + particularly the GPUs required to run these models. It will take some time for + the industry to meet this exploding demand. ## CodeRabbit's OpenAI usage pattern and challenges @@ -90,7 +90,7 @@ developers on the quality of their code. The feedback is provided in the form of comments on the pull request, allowing the developers to enhance the code based on the provided suggestions in the follow-up commits. -![CodeRabbit Pull Request Review Workflow](./2021-08-26-welcome/CodeRabbitDesign.jpg "CodeRabbit Pull Request Review Workflow") +![CodeRabbit Pull Request Review Workflow](../img/CodeRabbitDesign.jpg "CodeRabbit Pull Request Review Workflow") CodeRabbit employs a combination of the `gpt-3.5-turbo` and `gpt-4` family of models. For simpler tasks such as summarization, we use the more economical @@ -108,18 +108,18 @@ rate limits were met with no success. To mitigate these challenges, we cobbled together a makeshift solution for our API client: -- We set up four separate OpenAI accounts to distribute the load. -- Implemented an API concurrency limit on each reviewer instance to cap the - number of in-flight requests to OpenAI. -- Increased the back-off time for each retry and increased the number of - retries. OpenAI's rate limit headers were not helpful in determining the - optimal back-off times, as the - [headers](https://platform.openai.com/docs/guides/rate-limits/rate-limits-in-headers) - were outdated by tens of seconds and do not consider the in-flight requests. -- Transitioned from function-based serverless framework to a containerized - environment to benefit from extended timeout capabilities to ensure that - instances would not be terminated while requests were in the retry-back-off - loop. +- We set up four separate OpenAI accounts to distribute the load. +- Implemented an API concurrency limit on each reviewer instance to cap the + number of in-flight requests to OpenAI. +- Increased the back-off time for each retry and increased the number of + retries. OpenAI's rate limit headers were not helpful in determining the + optimal back-off times, as the + [headers](https://platform.openai.com/docs/guides/rate-limits/rate-limits-in-headers) + were outdated by tens of seconds and do not consider the in-flight requests. +- Transitioned from function-based serverless framework to a containerized + environment to benefit from extended timeout capabilities to ensure that + instances would not be terminated while requests were in the retry-back-off + loop. Although these adjustments provided temporary relief, the challenges resurfaced as the load increased within a few days. We were doing much guesswork to figure @@ -154,94 +154,94 @@ Agents, we employ Aperture's TypeScript SDK. Before calling OpenAI, we rely on Aperture Agent to gate the request using the `StartFlow` method. To provide more context to Aperture, we also attach the following labels to each request: -- `model_variant`: This specifies the model variant being used (`gpt-4`, - `gpt-3.5-turbo`, or `gpt-3.5-turbo-16k`). Requests and tokens per minute rate - limit policies are set individually for each model variant. -- `api_key` - This is a cryptographic hash of the OpenAI API key, and rate - limits are enforced on a per-key basis. -- `estimated_tokens`: As the tokens per minute quota limit is enforced based on - the - [estimated tokens for the completion request](https://platform.openai.com/docs/guides/rate-limits/reduce-the-max_tokens-to-match-the-size-of-your-completions), - we need to provide this number for each request to Aperture for metering. - Following OpenAI's - [guidance](https://help.openai.com/en/articles/4936856-what-are-tokens-and-how-to-count-them), - we calculate `estimated_tokens` as `(character_count / 4) + max_tokens`. Note - that OpenAI's rate limiter doesn't tokenize the request using the model's - specific tokenizer but relies on a character count-based heuristic. -- `product_tier`: CodeRabbit offers both `pro` and `free` tiers. The `pro` tier - provides comprehensive code reviews, whereas the `free` tier offers only the - summary of the pull request. -- `product_reason`: We also label why a review was initiated under the `pro` - tier. For example, the reasoning could that the user is a `paid_user`, - `trial_user` or a `open_source_user`. Requests to OpenAI are prioritized based - on these labels. -- `priority`: Requests are ranked according a priority number provided in this - label. For instance, requests from `paid_user` are given precedence over those - from `trial_user` and `open_source_user`. The base priority is incremented for - each file reviewed, enabling pull requests that are further along in the - review process to complete more quickly than newly submitted ones. - Additionally, chat messages are assigned a much higher priority compared to - review tasks. - -![Request Flow](./2021-08-26-welcome/request-flow.svg) +- `model_variant`: This specifies the model variant being used (`gpt-4`, + `gpt-3.5-turbo`, or `gpt-3.5-turbo-16k`). Requests and tokens per minute rate + limit policies are set individually for each model variant. +- `api_key` - This is a cryptographic hash of the OpenAI API key, and rate + limits are enforced on a per-key basis. +- `estimated_tokens`: As the tokens per minute quota limit is enforced based on + the + [estimated tokens for the completion request](https://platform.openai.com/docs/guides/rate-limits/reduce-the-max_tokens-to-match-the-size-of-your-completions), + we need to provide this number for each request to Aperture for metering. + Following OpenAI's + [guidance](https://help.openai.com/en/articles/4936856-what-are-tokens-and-how-to-count-them), + we calculate `estimated_tokens` as `(character_count / 4) + max_tokens`. Note + that OpenAI's rate limiter doesn't tokenize the request using the model's + specific tokenizer but relies on a character count-based heuristic. +- `product_tier`: CodeRabbit offers both `pro` and `free` tiers. The `pro` tier + provides comprehensive code reviews, whereas the `free` tier offers only the + summary of the pull request. +- `product_reason`: We also label why a review was initiated under the `pro` + tier. For example, the reasoning could that the user is a `paid_user`, + `trial_user` or a `open_source_user`. Requests to OpenAI are prioritized based + on these labels. +- `priority`: Requests are ranked according a priority number provided in this + label. For instance, requests from `paid_user` are given precedence over those + from `trial_user` and `open_source_user`. The base priority is incremented for + each file reviewed, enabling pull requests that are further along in the + review process to complete more quickly than newly submitted ones. + Additionally, chat messages are assigned a much higher priority compared to + review tasks. + +![Request Flow](request-flow.svg)
Integration with Aperture TypeScript SDK

```typescript - let flow: Flow | undefined = undefined - - if (this.apertureClient) { - const charCount = - this.systemMessage.length + - message.length + - String("system" + "user").length - const labels: Record = { - api_key: CryptoES.SHA256(api.apiKey).toString(), - estimated_tokens: ( - Math.ceil(charCount / 4) + responseTokens - ).toString(), - model_variant: modelVariant, - product_tier: this.settings.product_tier, - product_reason: this.settings.product_reason, - priority: String( - PRIORITIES[this.settings.product_reason] + priorityBump, - ), - prompt_type: promptType, - } - - flow = await this.apertureClient.StartFlow("openai", { - labels: labels, - grpcCallOptions: { - deadline: Date.now() + 1200000, - }, - }) - } - - // As we use Aperture as a queue, send the message regardless of whether it was accepted or rejected - try { - const { data: chatCompletion, response: raw } = await api.chat.completions - .create({ - model: modelVariant, - temperature: temperature, - top_p: topP, - max_tokens: responseTokens, - messages: messages, - }) - .withResponse() - .catch(err => { - logger.error(`openai chat error: ${JSON.stringify(err)}`) - throw err - }) - ) - return chatCompletion.choices[0]?.message?.content ?? "" - } catch (e) { - flow?.SetStatus(FlowStatusEnum.Error) - throw e // throw the error to be caught by the chat function - } finally { - flow?.End() - } + let flow: Flow | undefined = undefined + + if (this.apertureClient) { + const charCount = + this.systemMessage.length + + message.length + + String("system" + "user").length + const labels: Record = { + api_key: CryptoES.SHA256(api.apiKey).toString(), + estimated_tokens: ( + Math.ceil(charCount / 4) + responseTokens + ).toString(), + model_variant: modelVariant, + product_tier: this.settings.product_tier, + product_reason: this.settings.product_reason, + priority: String( + PRIORITIES[this.settings.product_reason] + priorityBump, + ), + prompt_type: promptType, + } + + flow = await this.apertureClient.StartFlow("openai", { + labels: labels, + grpcCallOptions: { + deadline: Date.now() + 1200000, + }, + }) + } + + // As we use Aperture as a queue, send the message regardless of whether it was accepted or rejected + try { + const { data: chatCompletion, response: raw } = await api.chat.completions + .create({ + model: modelVariant, + temperature: temperature, + top_p: topP, + max_tokens: responseTokens, + messages: messages, + }) + .withResponse() + .catch(err => { + logger.error(`openai chat error: ${JSON.stringify(err)}`) + throw err + }) + ) + return chatCompletion.choices[0]?.message?.content ?? "" + } catch (e) { + flow?.SetStatus(FlowStatusEnum.Error) + throw e // throw the error to be caught by the chat function + } finally { + flow?.End() + } ``` @@ -254,17 +254,17 @@ Aperture offers a foundational "blueprint" for [managing quotas](https://docs.fluxninja.com/reference/blueprints/quota-scheduling/base), comprising of two main components: -- Rate limiter: OpenAI employs a token bucket algorithm to impose rate limits, - and that is directly compatible with Aperture's rate limiter. For example, in - the tokens per minute policy for `gpt-4`, we have allocated a burst capacity - of `40000 tokens`, and a refill rate of `40000 tokens per minute`. The bucket - begins to refill the moment the tokens are withdrawn, aligning with OpenAI's - rate limiting mechanism. This ensures our outbound request and token rate - remains synchronized with OpenAI's enforced limits. -- Scheduler: Aperture has a - [weighted fair queuing](https://docs.fluxninja.com/concepts/scheduler/) - scheduler that prioritizes the requests based on multiple factors such as the - number of tokens, priority levels and workload labels. +- Rate limiter: OpenAI employs a token bucket algorithm to impose rate limits, + and that is directly compatible with Aperture's rate limiter. For example, in + the tokens per minute policy for `gpt-4`, we have allocated a burst capacity + of `40000 tokens`, and a refill rate of `40000 tokens per minute`. The bucket + begins to refill the moment the tokens are withdrawn, aligning with OpenAI's + rate limiting mechanism. This ensures our outbound request and token rate + remains synchronized with OpenAI's enforced limits. +- Scheduler: Aperture has a + [weighted fair queuing](https://docs.fluxninja.com/concepts/scheduler/) + scheduler that prioritizes the requests based on multiple factors such as the + number of tokens, priority levels and workload labels. By fine-tuning these two components in Aperture, we are able to go as fast as we can, with optimal user experience, while ensuring that we don't exceed the rate @@ -288,37 +288,37 @@ limits. blueprint: quota-scheduling/base uri: github.com/fluxninja/aperture/blueprints@latest policy: - # Name of the policy. - # Type: string + # Name of the policy. + # Type: string + # Required: True + policy_name: gpt-4-tpm + quota_scheduler: + # Bucket capacity. + # Type: float64 # Required: True - policy_name: gpt-4-tpm - quota_scheduler: - # Bucket capacity. - # Type: float64 - # Required: True - bucket_capacity: 40000 - # Fill amount. - # Type: float64 - # Required: True - fill_amount: 40000 - # Rate Limiter Parameters - # Type: aperture.spec.v1.RateLimiterParameters - # Required: True - rate_limiter: - interval: 60s - label_key: api_key - scheduler: - priority_label_key: priority - tokens_label_key: estimated_tokens - # Flow selectors to match requests against - # Type: []aperture.spec.v1.Selector - # Required: True - selectors: - - control_point: openai - agent_group: coderabbit-prod - label_matcher: - match_labels: - model_variant: gpt-4 + bucket_capacity: 40000 + # Fill amount. + # Type: float64 + # Required: True + fill_amount: 40000 + # Rate Limiter Parameters + # Type: aperture.spec.v1.RateLimiterParameters + # Required: True + rate_limiter: + interval: 60s + label_key: api_key + scheduler: + priority_label_key: priority + tokens_label_key: estimated_tokens + # Flow selectors to match requests against + # Type: []aperture.spec.v1.Selector + # Required: True + selectors: + - control_point: openai + agent_group: coderabbit-prod + label_matcher: + match_labels: + model_variant: gpt-4 ``` ```mdx-code-block @@ -335,36 +335,36 @@ policy: blueprint: quota-scheduling/base uri: github.com/fluxninja/aperture/blueprints@latest policy: - # Name of the policy. - # Type: string + # Name of the policy. + # Type: string + # Required: True + policy_name: gpt-4-rpm + quota_scheduler: + # Bucket capacity. + # Type: float64 + # Required: True + bucket_capacity: 200 + # Fill amount. + # Type: float64 + # Required: True + fill_amount: 200 + # Rate Limiter Parameters. + # Type: aperture.spec.v1.RateLimiterParameters + # Required: True + rate_limiter: + interval: 60s + label_key: api_key + scheduler: + priority_label_key: priority + # Flow selectors to match requests against + # Type: []aperture.spec.v1.Selector # Required: True - policy_name: gpt-4-rpm - quota_scheduler: - # Bucket capacity. - # Type: float64 - # Required: True - bucket_capacity: 200 - # Fill amount. - # Type: float64 - # Required: True - fill_amount: 200 - # Rate Limiter Parameters. - # Type: aperture.spec.v1.RateLimiterParameters - # Required: True - rate_limiter: - interval: 60s - label_key: api_key - scheduler: - priority_label_key: priority - # Flow selectors to match requests against - # Type: []aperture.spec.v1.Selector - # Required: True - selectors: - - control_point: openai - agent_group: coderabbit-prod - label_matcher: - match_labels: - model_variant: gpt-4 + selectors: + - control_point: openai + agent_group: coderabbit-prod + label_matcher: + match_labels: + model_variant: gpt-4 ``` ```mdx-code-block @@ -385,12 +385,12 @@ remains smooth and hovers around `666 tokens per second`. This roughly translates to `40,000 tokens per minute`. Essentially, Aperture is smoothing out the fluctuating incoming token rate to align it with OpenAI's rate limits. -![Token Rate in Light Mode](./2021-08-26-welcome/token-rate-light.png#gh-light-mode-only) +![Token Rate in Light Mode](token-rate-light.png#gh-light-mode-only) The below image shows request prioritization metrics from the Aperture Cloud console during the same peak load period: -![Prioritization Metrics in Light Mode](./2021-08-26-welcome/priorities-light.png#gh-light-mode-only) +![Prioritization Metrics in Light Mode](priorities-light.png#gh-light-mode-only) In the upper left panel of the metrics, noticeable peaks indicate that some requests got queued for several minutes in Aperture. We can verify that the @@ -414,7 +414,7 @@ family of models. This is quite insightful, as it hints at why OpenAI's infrastructure struggles to meet demand - these APIs are not just simple database or analytics queries; they are computationally expensive to run. -![Flow Analytics](./2021-08-26-welcome/flow-analytics-light.png#gh-light-mode-only) +![Flow Analytics](flow-analytics-light.png#gh-light-mode-only) ## Conclusion diff --git a/blog/2021-08-26-welcome/flow-analytics-dark.png b/blog/2023-10-23-coderabbit-openai-rate-limits/flow-analytics-dark.png similarity index 100% rename from blog/2021-08-26-welcome/flow-analytics-dark.png rename to blog/2023-10-23-coderabbit-openai-rate-limits/flow-analytics-dark.png diff --git a/blog/2021-08-26-welcome/flow-analytics-light.png b/blog/2023-10-23-coderabbit-openai-rate-limits/flow-analytics-light.png similarity index 100% rename from blog/2021-08-26-welcome/flow-analytics-light.png rename to blog/2023-10-23-coderabbit-openai-rate-limits/flow-analytics-light.png diff --git a/blog/2021-08-26-welcome/priorities-dark.png b/blog/2023-10-23-coderabbit-openai-rate-limits/priorities-dark.png similarity index 100% rename from blog/2021-08-26-welcome/priorities-dark.png rename to blog/2023-10-23-coderabbit-openai-rate-limits/priorities-dark.png diff --git a/blog/2021-08-26-welcome/priorities-light.png b/blog/2023-10-23-coderabbit-openai-rate-limits/priorities-light.png similarity index 100% rename from blog/2021-08-26-welcome/priorities-light.png rename to blog/2023-10-23-coderabbit-openai-rate-limits/priorities-light.png diff --git a/blog/2021-08-26-welcome/request-flow.svg b/blog/2023-10-23-coderabbit-openai-rate-limits/request-flow.svg similarity index 100% rename from blog/2021-08-26-welcome/request-flow.svg rename to blog/2023-10-23-coderabbit-openai-rate-limits/request-flow.svg diff --git a/blog/2021-08-26-welcome/token-rate-dark.png b/blog/2023-10-23-coderabbit-openai-rate-limits/token-rate-dark.png similarity index 100% rename from blog/2021-08-26-welcome/token-rate-dark.png rename to blog/2023-10-23-coderabbit-openai-rate-limits/token-rate-dark.png diff --git a/blog/2021-08-26-welcome/token-rate-light.png b/blog/2023-10-23-coderabbit-openai-rate-limits/token-rate-light.png similarity index 100% rename from blog/2021-08-26-welcome/token-rate-light.png rename to blog/2023-10-23-coderabbit-openai-rate-limits/token-rate-light.png diff --git a/blog/2024-01-05-modern-ai-stack-for-developer-productivity/index.md b/blog/2024-01-05-modern-ai-stack-for-developer-productivity/index.md index 7cdb3135..8b1dce43 100644 --- a/blog/2024-01-05-modern-ai-stack-for-developer-productivity/index.md +++ b/blog/2024-01-05-modern-ai-stack-for-developer-productivity/index.md @@ -4,7 +4,14 @@ title: Modern AI stack for developer productivity description: Elevate your development workflow with three pillars of developer productivity tools powered by Artificial Intelligence image: banner.jpg authors: [pradeep] -tags: ["developer productivity", "developer tools", "ai tools", "ai developer tools", "technology trend"] +tags: + [ + "developer productivity", + "developer tools", + "ai tools", + "ai developer tools", + "technology trend", + ] hide_table_of_contents: false aiDisclaimer: true --- @@ -15,64 +22,52 @@ The modern AI stack for developer productivity is reshaping the landscape of sof Are you leveraging the full potential of the modern AI tech stack in your projects? This article might help you to get that perspective needed to understand how it might elevate your work to the next level. + ## Three Pillars of the **Modern AI Stack for Developer Productivity** There are three key components in the modern AI stack for developer productivity that are useful in different stages of the development lifecycle. These three stages are the research or knowledge gathering stage, the coding stage, and the final code review stage. Let’s discuss each of these stages in detail and how AI tools can help improve developer productivity in each. - ### Knowledge The Knowledge pillar is central to the modern AI stack. It involves AI systems helping developers gather and synthesize knowledge, usually in the form of a chat or question-and-answer session. A prime example in this space is [ChatGPT](https://chat.openai.com/) - - -* [ChatGPT](https://chat.openai.com/) is the leading AI assistant to quickly answer developers' questions on syntax, frameworks, debugging, etc. -* It acts like a supercharged search engine, saving developers time from having to dig through documentation or StackOverflow. -* ChatGPT can also explain concepts, provide code examples and suggestions, and identify knowledge gaps. Over time, these models will get better at technical reasoning with more training data. -* [StackOverflow Community Search](https://stackoverflow.co/labs/search/) is another product in this category which instantly summarizes the solution. +- [ChatGPT](https://chat.openai.com/) is the leading AI assistant to quickly answer developers' questions on syntax, frameworks, debugging, etc. +- It acts like a supercharged search engine, saving developers time from having to dig through documentation or StackOverflow. +- ChatGPT can also explain concepts, provide code examples and suggestions, and identify knowledge gaps. Over time, these models will get better at technical reasoning with more training data. +- [StackOverflow Community Search](https://stackoverflow.co/labs/search/) is another product in this category which instantly summarizes the solution. This transformation is crucial in developing environments where quick access to information and rapid problem-solving are essential. - #### Challenges One of the main challenges is ensuring the accuracy and reliability of the answers. AI systems might sometimes generate plausible but incorrect or biased responses. - ### Code Generation Code generation through AI marks a significant leap in software development. AI models, trained on vast code repositories, can now assist in generating code snippets and at times the entire modules. This speeds up the coding process. The evolution of this pillar is a testament to AI's growing understanding of programming languages and logic, offering a collaborative tool that augments the developer's capabilities rather than replacing them. - - -* AI models like OpenAI’s GPT-4 Code Interpreter are leading this segment. -* They aid in writing code, offering suggestions, and even generating entire code blocks based on user input. -* They are particularly beneficial in increasing development speed and making coding more accessible to non-experts. -* [GitHub Copilot](https://github.com/features/copilot) introduces this experience in the IDE (such as VS Code) where you code. It enhances coding efficiency by rapidly suggesting code blocks and functions directly within the editor. This helps developers generate boilerplate code, complete repetitive tasks and implement common patterns much faster. - +- AI models like OpenAI’s GPT-4 Code Interpreter are leading this segment. +- They aid in writing code, offering suggestions, and even generating entire code blocks based on user input. +- They are particularly beneficial in increasing development speed and making coding more accessible to non-experts. +- [GitHub Copilot](https://github.com/features/copilot) introduces this experience in the IDE (such as VS Code) where you code. It enhances coding efficiency by rapidly suggesting code blocks and functions directly within the editor. This helps developers generate boilerplate code, complete repetitive tasks and implement common patterns much faster. #### Challenges The limitations include dependency on the training data, which may not always represent the most efficient or modern coding practices. Ethically, there are concerns about code originality and the potential for inadvertently generating vulnerable or buggy code. - ### Code Review AI’s role in code review is about ensuring quality, compliance, and optimization. Unlike traditional code reviews, which are time-consuming and prone to human oversight, AI-driven code reviews are swift and more thorough. AI models can scan code for patterns, anomalies, and compliance with coding standards, offering insights and suggestions for improvements. This pillar has evolved from basic syntax checking to sophisticated analysis, significantly enhancing the code quality. - - -* Automated code review tools, like [CodeRabbit](https://coderabbit.ai/), help in identifying bugs, evaluating whether the PR achieves its objectives, and ensuring adherence to coding standards. The in-line comments make it easier to use and put things in motion. -* These tools can analyze code more thoroughly and quickly than human reviewers, leading to higher quality software. This frees up developer time as well as improves code quality before reaching production. -* Over time, CodeRabbit could fine-tune to a team's specific code review checklist and feedback provided in comments to provide even more accurate suggestions and extend this access to organization knowledge via code reviews naturally. - +- Automated code review tools, like [CodeRabbit](https://coderabbit.ai/), help in identifying bugs, evaluating whether the PR achieves its objectives, and ensuring adherence to coding standards. The in-line comments make it easier to use and put things in motion. +- These tools can analyze code more thoroughly and quickly than human reviewers, leading to higher quality software. This frees up developer time as well as improves code quality before reaching production. +- Over time, CodeRabbit could fine-tune to a team's specific code review checklist and feedback provided in comments to provide even more accurate suggestions and extend this access to organization knowledge via code reviews naturally. #### Challenges If there is not enough information about the requirements in the issues, the PR assessment against the requirement might not provide the accurate picture as you would expect. - ## Prioritize knowledge and review over generation While most people would be attracted by the promises code generation offers, I believe it will not have as big an impact on developer productivity as the other two - Knowledge and Code Review. @@ -85,7 +80,6 @@ As [StackOverflow rightly mentioned](https://stackoverflow.blog/2023/12/29/the-h Software is more than just code; it's about meeting the users' need. The knowledge and code review pillar tightly align with this goal. Which is why I urge you to prioritize Knowledge and Code Review tools in your modern AI stack. - ## Conclusion The integration of these three pillars - Knowledge, Code Generation, and Code Review - forms a robust foundation in the AI-driven development process. Each pillar complements the others, creating a synergistic environment where developers are empowered with advanced tools and insights, leading to more efficient, innovative, and error-free software development. diff --git a/blog/authors.yml b/blog/authors.yml index 7943d2c7..6bd8f8b8 100644 --- a/blog/authors.yml +++ b/blog/authors.yml @@ -1,46 +1,40 @@ gur: - name: Gur Singh - title: Co-Founder - url: https://www.linkedin.com/in/gur-singh-510175280/ - image_url: "/img/authors/gur.jpeg" - -endi: - name: Gur Singh - title: Co-Founder - url: https://www.linkedin.com/in/gur-singh-510175280/ - image_url: "/img/authors/gur.jpeg" + name: Gur Singh + title: Co-Founder + url: https://www.linkedin.com/in/gur-singh-510175280/ + image_url: "/img/authors/gur.jpeg" vishu: - name: Vishu Kaur - title: Co-Founder - url: https://www.linkedin.com/in/vishavjeet/ - image_url: "/img/authors/vishu.jpg" + name: Vishu Kaur + title: Co-Founder + url: https://www.linkedin.com/in/vishavjeet/ + image_url: "/img/authors/vishu.jpg" simone: - name: Simone Cuomo - title: Software Architect and Mentor - url: https://www.linkedin.com/in/simone-cuomo-65582a68/?originalSubdomain=uk - image_url: https://images.ctfassets.net/zojzzdop0fzx/59RPVhlrYsGilokuWG9eEt/3088f77ef8f512cc502f6fd0f92b5916/simone.png?fm=webp&w=3840&q=75 + name: Simone Cuomo + title: Software Architect and Mentor + url: https://www.linkedin.com/in/simone-cuomo-65582a68/?originalSubdomain=uk + image_url: https://images.ctfassets.net/zojzzdop0fzx/59RPVhlrYsGilokuWG9eEt/3088f77ef8f512cc502f6fd0f92b5916/simone.png?fm=webp&w=3840&q=75 sumanvs: - name: Suman Kumar - title: Software Engineer - url: https://github.com/sumanvs - image_url: "/img/authors/suman.png" + name: Suman Kumar + title: Software Engineer + url: https://github.com/sumanvs + image_url: "/img/authors/suman.png" nato: - name: Nato Boram - title: Software Engineer - url: https://github.com/NatoBoram - image_url: https://avatars.githubusercontent.com/u/10495562?v=4 + name: Nato Boram + title: Software Engineer + url: https://github.com/NatoBoram + image_url: https://avatars.githubusercontent.com/u/10495562?v=4 dotlabs: - name: This Dot Labs - url: https://www.linkedin.com/company/thisdot/ - image_url: https://images.crunchbase.com/image/upload/c_lpad,h_256,w_256,f_auto,q_auto:eco,dpr_1/og7xjpegm86zqz3mfo3s + name: This Dot Labs + url: https://www.linkedin.com/company/thisdot/ + image_url: https://images.crunchbase.com/image/upload/c_lpad,h_256,w_256,f_auto,q_auto:eco,dpr_1/og7xjpegm86zqz3mfo3s pradeep: - name: Pradeep Sharma - title: Developer Relations - url: https://github.com/gitcommitshow - image_url: https://avatars.githubusercontent.com/u/56937085?v=4 \ No newline at end of file + name: Pradeep Sharma + title: Developer Relations + url: https://github.com/gitcommitshow + image_url: https://avatars.githubusercontent.com/u/56937085?v=4 diff --git a/blog/2021-08-26-welcome/CodeRabbitDesign.jpg b/blog/img/CodeRabbitDesign.jpg similarity index 100% rename from blog/2021-08-26-welcome/CodeRabbitDesign.jpg rename to blog/img/CodeRabbitDesign.jpg diff --git a/docusaurus.config.ts b/docusaurus.config.ts index 12802f4a..a408baee 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -3,172 +3,178 @@ import type { Config } from "@docusaurus/types"; import { themes as prismThemes } from "prism-react-renderer"; import { EnumChangefreq } from "sitemap"; -// const baseUrl = "/docs"; const baseUrl = "/"; -// const baseUrl = "https://docs.coderabbit.ai/"; const config: Config = { - title: "CodeRabbit", - staticDirectories: ["public", "static"], - tagline: "AI-powered Code Reviews", - favicon: "img/favIcon.png", + title: "CodeRabbit", + staticDirectories: ["public", "static"], + tagline: "AI-powered Code Reviews", + favicon: "img/favIcon.png", - // Set the production url of your site here - url: "https://coderabbit.ai/", - // Set the // pathname under which your site is served - // For GitHub pages deployment, it is often '//' - baseUrl: baseUrl, + // Set the production url of your site here + url: "https://coderabbit.ai/", + // Set the // pathname under which your site is served + // For GitHub pages deployment, it is often '//' + baseUrl: baseUrl, - // GitHub pages deployment config. - // If you aren't using GitHub pages, you don't need these. - organizationName: "facebook", // Usually your GitHub org/user name. - projectName: "docusaurus", // Usually your repo name. + // GitHub pages deployment config. + // If you aren't using GitHub pages, you don't need these. + organizationName: "facebook", // Usually your GitHub org/user name. + projectName: "docusaurus", // Usually your repo name. - onBrokenLinks: "throw", - onBrokenMarkdownLinks: "warn", + onBrokenLinks: "throw", + onBrokenMarkdownLinks: "warn", - // Even if you don't use internationalization, you can use this field to set - // useful metadata like html lang. For example, if your site is Chinese, you - // may want to replace "en" with "zh-Hans". - i18n: { - defaultLocale: "en", - locales: ["en"], - }, + // Even if you don't use internationalization, you can use this field to set + // useful metadata like html lang. For example, if your site is Chinese, you + // may want to replace "en" with "zh-Hans". + i18n: { + defaultLocale: "en", + locales: ["en"], + }, - plugins: [ - [ - "@docusaurus/plugin-client-redirects", - { - redirects: [ - { - to: "https://docs.coderabbit.ai/docs/get-started/signup", - from: "/docs/get-started", - }, - ], - }, - ], - async function myPlugin(context, options) { - return { - name: "docusaurus-tailwindcss", - configurePostCss(postcssOptions) { - // Appends TailwindCSS and AutoPrefixer. - postcssOptions.plugins.push(require("tailwindcss")); - postcssOptions.plugins.push(require("autoprefixer")); - return postcssOptions; - }, - }; - }, - ], - - presets: [ - [ - "classic", - { - docs: { - sidebarPath: "./sidebars.ts", - routeBasePath: "/", - breadcrumbs: true, - showLastUpdateTime: true, - }, - blog: { - routeBasePath: "/blog", - showReadingTime: true, - }, - theme: { - customCss: "./src/css/custom.css", - }, - sitemap: { - changefreq: "weekly" as EnumChangefreq, - priority: 0.5, - ignorePatterns: ["/tags/**"], - filename: "sitemap.xml", - }, - googleTagManager: { - containerId: "GTM-5BWLXJRC", - }, - } satisfies Preset.Options, + plugins: [ + [ + "@docusaurus/plugin-client-redirects", + { + redirects: [ + { + to: "https://docs.coderabbit.ai/docs/get-started/signup", + from: "/docs/get-started", + }, ], + }, ], + async function myPlugin(context, options) { + return { + name: "docusaurus-tailwindcss", + configurePostCss(postcssOptions) { + // Appends TailwindCSS and AutoPrefixer. + postcssOptions.plugins.push(require("tailwindcss")); + postcssOptions.plugins.push(require("autoprefixer")); + return postcssOptions; + }, + }; + }, + ], - scripts: [ - "https://buttons.github.io/buttons.js", - "https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js", - "/docs/js/code-block-buttons.js", - `https://cdnjs.cloudflare.com/ajax/libs/axios/1.2.1/axios.min.js`, - { - src: "https://cdnjs.cloudflare.com/ajax/libs/axios/1.2.1/axios.min.js", - async: true, + presets: [ + [ + "classic", + { + docs: { + sidebarPath: "./sidebars.ts", + routeBasePath: "/", + breadcrumbs: true, + showLastUpdateTime: true, + }, + blog: { + blogTitle: "CodeRabbit Blog", + blogDescription: "Blog", + tagsBasePath: "/tags", + editLocalizedFiles: false, + routeBasePath: "/blog", + showReadingTime: true, + blogSidebarCount: "ALL", + blogSidebarTitle: "All our posts", + blogListComponent: "@theme/BlogListPage", + blogPostComponent: "@theme/BlogPostPage", + }, + theme: { + customCss: "./src/css/custom.css", }, + sitemap: { + changefreq: "weekly" as EnumChangefreq, + priority: 0.5, + ignorePatterns: ["/tags/**"], + filename: "sitemap.xml", + }, + googleTagManager: { + containerId: "GTM-5BWLXJRC", + }, + } satisfies Preset.Options, ], + ], - themeConfig: { - // Replace with your project's social card - editUrl: null, - colorMode: { - defaultMode: "light", - disableSwitch: false, - respectPrefersColorScheme: false, + scripts: [ + "https://buttons.github.io/buttons.js", + "https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js", + "/docs/js/code-block-buttons.js", + `https://cdnjs.cloudflare.com/ajax/libs/axios/1.2.1/axios.min.js`, + { + src: "https://cdnjs.cloudflare.com/ajax/libs/axios/1.2.1/axios.min.js", + async: true, + }, + ], + + themeConfig: { + // Replace with your project's social card + editUrl: null, + colorMode: { + defaultMode: "light", + disableSwitch: false, + respectPrefersColorScheme: false, + }, + docs: { + sidebar: { + hideable: true, + }, + }, + metadata: [ + { name: "keywords", content: "ai, blog" }, + { name: "twitter:card", content: "summary_large_image" }, + ], + headTags: [ + // Declare a preconnect tag + { + tagName: "link", + attributes: { + rel: "preconnect", + href: "https://coderabbit.ai/blog/coderabbit-deep-dive", }, - docs: { - sidebar: { - hideable: true, - }, + }, + // Declare some json-ld structured data + ], + image: "img/docusaurus-social-card.jpg", + navbar: { + title: "", + hideOnScroll: true, + logo: { + alt: "", + src: "img/coderabbit_nav_logo.svg", + href: "https://coderabbit.ai", + }, + items: [ + { + type: "docSidebar", + docId: "docs", + sidebarId: "docsSidebar", + position: "left", + label: "Docs", + href: "https://docs.coderabbit.ai", + target: "_self", }, - metadata: [ - { name: "keywords", content: "ai, blog" }, - { name: "twitter:card", content: "summary_large_image" }, - ], - headTags: [ - // Declare a preconnect tag - { - tagName: "link", - attributes: { - rel: "preconnect", - href: "https://coderabbit.ai/blog/coderabbit-deep-dive", - }, - }, - // Declare some json-ld structured data - ], - image: "img/docusaurus-social-card.jpg", - navbar: { - title: "", - hideOnScroll: true, - logo: { - alt: "", - src: "img/coderabbit_nav_logo.svg", - href: "https://coderabbit.ai", - }, - items: [ - { - type: "docSidebar", - docId: "docs", - sidebarId: "docsSidebar", - position: "left", - label: "Docs", - href: "https://docs.coderabbit.ai", - target: "_self", - }, - { - // type: "docSidebar", - // sidebarId: "blogsSidebar", - position: "left", - label: "Blog", - href: "https://blog.coderabbit.ai/blog", - }, - { - href: "https://discord.gg/GsXnASn26c", - className: "header-discord-link", - "aria-label": "Discord", - position: "right", - label: "Discord", - }, - ], + { + // type: "docSidebar", + // sidebarId: "blogsSidebar", + position: "left", + label: "Blog", + href: "https://blog.coderabbit.ai/blog", }, - prism: { - theme: prismThemes.github, - darkTheme: prismThemes.dracula, + { + href: "https://discord.gg/GsXnASn26c", + className: "header-discord-link", + "aria-label": "Discord", + position: "right", + label: "Discord", }, - } satisfies Preset.ThemeConfig, + ], + }, + prism: { + theme: prismThemes.github, + darkTheme: prismThemes.dracula, + }, + } satisfies Preset.ThemeConfig, }; export default config; diff --git a/package-lock.json b/package-lock.json index a7cb75f4..50b5898a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,10 +8,10 @@ "name": "coderabbit-docs", "version": "0.0.0", "dependencies": { - "@docusaurus/core": "^3.1.0", - "@docusaurus/plugin-client-redirects": "^3.1.0", - "@docusaurus/plugin-content-blog": "^3.1.0", - "@docusaurus/preset-classic": "^3.1.0", + "@docusaurus/core": "^3.1.1", + "@docusaurus/plugin-client-redirects": "^3.1.1", + "@docusaurus/plugin-content-blog": "^3.1.1", + "@docusaurus/preset-classic": "^3.1.1", "@mdx-js/react": "^3.0.0", "autoprefixer": "^10.4.16", "clsx": "^2.0.0", @@ -22,9 +22,9 @@ "tailwindcss": "^3.4.0" }, "devDependencies": { - "@docusaurus/module-type-aliases": "^3.1.0", - "@docusaurus/tsconfig": "^3.1.0", - "@docusaurus/types": "^3.1.0", + "@docusaurus/module-type-aliases": "^3.1.1", + "@docusaurus/tsconfig": "^3.1.1", + "@docusaurus/types": "^3.1.1", "typescript": "~5.2.2" }, "engines": { @@ -2181,9 +2181,9 @@ } }, "node_modules/@docusaurus/core": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.1.0.tgz", - "integrity": "sha512-GWudMGYA9v26ssbAWJNfgeDZk+lrudUTclLPRsmxiknEBk7UMp7Rglonhqbsf3IKHOyHkMU4Fr5jFyg5SBx9jQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.1.1.tgz", + "integrity": "sha512-2nQfKFcf+MLEM7JXsXwQxPOmQAR6ytKMZVSx7tVi9HEm9WtfwBH1fp6bn8Gj4zLUhjWKCLoysQ9/Wm+EZCQ4yQ==", "dependencies": { "@babel/core": "^7.23.3", "@babel/generator": "^7.23.3", @@ -2195,13 +2195,13 @@ "@babel/runtime": "^7.22.6", "@babel/runtime-corejs3": "^7.22.6", "@babel/traverse": "^7.22.8", - "@docusaurus/cssnano-preset": "3.1.0", - "@docusaurus/logger": "3.1.0", - "@docusaurus/mdx-loader": "3.1.0", + "@docusaurus/cssnano-preset": "3.1.1", + "@docusaurus/logger": "3.1.1", + "@docusaurus/mdx-loader": "3.1.1", "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/utils": "3.1.0", - "@docusaurus/utils-common": "3.1.0", - "@docusaurus/utils-validation": "3.1.0", + "@docusaurus/utils": "3.1.1", + "@docusaurus/utils-common": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", "@slorber/static-site-generator-webpack-plugin": "^4.0.7", "@svgr/webpack": "^6.5.1", "autoprefixer": "^10.4.14", @@ -2267,9 +2267,9 @@ } }, "node_modules/@docusaurus/cssnano-preset": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.1.0.tgz", - "integrity": "sha512-ned7qsgCqSv/e7KyugFNroAfiszuxLwnvMW7gmT2Ywxb/Nyt61yIw7KHyAZCMKglOalrqnYA4gMhLUCK/mVePA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.1.1.tgz", + "integrity": "sha512-LnoIDjJWbirdbVZDMq+4hwmrTl2yHDnBf9MLG9qyExeAE3ac35s4yUhJI8yyTCdixzNfKit4cbXblzzqMu4+8g==", "dependencies": { "cssnano-preset-advanced": "^5.3.10", "postcss": "^8.4.26", @@ -2281,9 +2281,9 @@ } }, "node_modules/@docusaurus/logger": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.1.0.tgz", - "integrity": "sha512-p740M+HCst1VnKKzL60Hru9xfG4EUYJDarjlEC4hHeBy9+afPmY3BNPoSHx9/8zxuYfUlv/psf7I9NvRVdmdvg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.1.1.tgz", + "integrity": "sha512-BjkNDpQzewcTnST8trx4idSoAla6zZ3w22NqM/UMcFtvYJgmoE4layuTzlfql3VFPNuivvj7BOExa/+21y4X2Q==", "dependencies": { "chalk": "^4.1.2", "tslib": "^2.6.0" @@ -2293,15 +2293,15 @@ } }, "node_modules/@docusaurus/mdx-loader": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.1.0.tgz", - "integrity": "sha512-D7onDz/3mgBonexWoQXPw3V2E5Bc4+jYRf9gGUUK+KoQwU8xMDaDkUUfsr7t6UBa/xox9p5+/3zwLuXOYMzGSg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.1.1.tgz", + "integrity": "sha512-xN2IccH9+sv7TmxwsDJNS97BHdmlqWwho+kIVY4tcCXkp+k4QuzvWBeunIMzeayY4Fu13A6sAjHGv5qm72KyGA==", "dependencies": { "@babel/parser": "^7.22.7", "@babel/traverse": "^7.22.8", - "@docusaurus/logger": "3.1.0", - "@docusaurus/utils": "3.1.0", - "@docusaurus/utils-validation": "3.1.0", + "@docusaurus/logger": "3.1.1", + "@docusaurus/utils": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", "@mdx-js/mdx": "^3.0.0", "@slorber/remark-comment": "^1.0.0", "escape-html": "^1.0.3", @@ -2333,12 +2333,12 @@ } }, "node_modules/@docusaurus/module-type-aliases": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.1.0.tgz", - "integrity": "sha512-XUl7Z4PWlKg4l6KF05JQ3iDHQxnPxbQUqTNKvviHyuHdlalOFv6qeDAm7IbzyQPJD5VA6y4dpRbTWSqP9ClwPg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.1.1.tgz", + "integrity": "sha512-xBJyx0TMfAfVZ9ZeIOb1awdXgR4YJMocIEzTps91rq+hJDFJgJaylDtmoRhUxkwuYmNK1GJpW95b7DLztSBJ3A==", "dependencies": { "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/types": "3.1.0", + "@docusaurus/types": "3.1.1", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", @@ -2352,15 +2352,15 @@ } }, "node_modules/@docusaurus/plugin-client-redirects": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-3.1.0.tgz", - "integrity": "sha512-CuFbdciMGvtGYiIPSOpj5idsHOQUcqZWTLCmZV3ePhviekm4dRZm1+QK/BxigmSTL5ICJMGbtOQnz7bgFSWHqg==", - "dependencies": { - "@docusaurus/core": "3.1.0", - "@docusaurus/logger": "3.1.0", - "@docusaurus/utils": "3.1.0", - "@docusaurus/utils-common": "3.1.0", - "@docusaurus/utils-validation": "3.1.0", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-3.1.1.tgz", + "integrity": "sha512-J/1Z75XkO+BmUXHW17FrCIYZQ3b0IKaJECH6yCxW5RQ8NMMJ+SZCtPtx5oYoAd0VHersNiUu+ZAxfOqbsn1jKQ==", + "dependencies": { + "@docusaurus/core": "3.1.1", + "@docusaurus/logger": "3.1.1", + "@docusaurus/utils": "3.1.1", + "@docusaurus/utils-common": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", "eta": "^2.2.0", "fs-extra": "^11.1.1", "lodash": "^4.17.21", @@ -2375,17 +2375,17 @@ } }, "node_modules/@docusaurus/plugin-content-blog": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.1.0.tgz", - "integrity": "sha512-iMa6WBaaEdYuxckvJtLcq/HQdlA4oEbCXf/OFfsYJCCULcDX7GDZpKxLF3X1fLsax3sSm5bmsU+CA0WD+R1g3A==", - "dependencies": { - "@docusaurus/core": "3.1.0", - "@docusaurus/logger": "3.1.0", - "@docusaurus/mdx-loader": "3.1.0", - "@docusaurus/types": "3.1.0", - "@docusaurus/utils": "3.1.0", - "@docusaurus/utils-common": "3.1.0", - "@docusaurus/utils-validation": "3.1.0", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.1.1.tgz", + "integrity": "sha512-ew/3VtVoG3emoAKmoZl7oKe1zdFOsI0NbcHS26kIxt2Z8vcXKCUgK9jJJrz0TbOipyETPhqwq4nbitrY3baibg==", + "dependencies": { + "@docusaurus/core": "3.1.1", + "@docusaurus/logger": "3.1.1", + "@docusaurus/mdx-loader": "3.1.1", + "@docusaurus/types": "3.1.1", + "@docusaurus/utils": "3.1.1", + "@docusaurus/utils-common": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", "cheerio": "^1.0.0-rc.12", "feed": "^4.2.2", "fs-extra": "^11.1.1", @@ -2406,17 +2406,17 @@ } }, "node_modules/@docusaurus/plugin-content-docs": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.1.0.tgz", - "integrity": "sha512-el5GxhT8BLrsWD0qGa8Rq+Ttb/Ni6V3DGT2oAPio0qcs/mUAxeyXEAmihkvmLCnAgp6xD27Ce7dISZ5c6BXeqA==", - "dependencies": { - "@docusaurus/core": "3.1.0", - "@docusaurus/logger": "3.1.0", - "@docusaurus/mdx-loader": "3.1.0", - "@docusaurus/module-type-aliases": "3.1.0", - "@docusaurus/types": "3.1.0", - "@docusaurus/utils": "3.1.0", - "@docusaurus/utils-validation": "3.1.0", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.1.1.tgz", + "integrity": "sha512-lhFq4E874zw0UOH7ujzxnCayOyAt0f9YPVYSb9ohxrdCM8B4szxitUw9rIX4V9JLLHVoqIJb6k+lJJ1jrcGJ0A==", + "dependencies": { + "@docusaurus/core": "3.1.1", + "@docusaurus/logger": "3.1.1", + "@docusaurus/mdx-loader": "3.1.1", + "@docusaurus/module-type-aliases": "3.1.1", + "@docusaurus/types": "3.1.1", + "@docusaurus/utils": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", "@types/react-router-config": "^5.0.7", "combine-promises": "^1.1.0", "fs-extra": "^11.1.1", @@ -2435,15 +2435,15 @@ } }, "node_modules/@docusaurus/plugin-content-pages": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.1.0.tgz", - "integrity": "sha512-9gntYQFpk+93+Xl7gYczJu8I9uWoyRLnRwS0+NUFcs9iZtHKsdqKWPRrONC9elfN3wJ9ORwTbcVzsTiB8jvYlg==", - "dependencies": { - "@docusaurus/core": "3.1.0", - "@docusaurus/mdx-loader": "3.1.0", - "@docusaurus/types": "3.1.0", - "@docusaurus/utils": "3.1.0", - "@docusaurus/utils-validation": "3.1.0", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.1.1.tgz", + "integrity": "sha512-NQHncNRAJbyLtgTim9GlEnNYsFhuCxaCNkMwikuxLTiGIPH7r/jpb7O3f3jUMYMebZZZrDq5S7om9a6rvB/YCA==", + "dependencies": { + "@docusaurus/core": "3.1.1", + "@docusaurus/mdx-loader": "3.1.1", + "@docusaurus/types": "3.1.1", + "@docusaurus/utils": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", "fs-extra": "^11.1.1", "tslib": "^2.6.0", "webpack": "^5.88.1" @@ -2457,13 +2457,13 @@ } }, "node_modules/@docusaurus/plugin-debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.1.0.tgz", - "integrity": "sha512-AbvJwCVRbmQ8w9d8QXbF4Iq/ui0bjPZNYFIhtducGFnm2YQRN1mraK8mCEQb0Aq0T8SqRRvSfC/far4n/s531w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.1.1.tgz", + "integrity": "sha512-xWeMkueM9wE/8LVvl4+Qf1WqwXmreMjI5Kgr7GYCDoJ8zu4kD+KaMhrh7py7MNM38IFvU1RfrGKacCEe2DRRfQ==", "dependencies": { - "@docusaurus/core": "3.1.0", - "@docusaurus/types": "3.1.0", - "@docusaurus/utils": "3.1.0", + "@docusaurus/core": "3.1.1", + "@docusaurus/types": "3.1.1", + "@docusaurus/utils": "3.1.1", "fs-extra": "^11.1.1", "react-json-view-lite": "^1.2.0", "tslib": "^2.6.0" @@ -2477,13 +2477,13 @@ } }, "node_modules/@docusaurus/plugin-google-analytics": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.1.0.tgz", - "integrity": "sha512-zvUOMzu9Uhz0ciqnSbtnp/5i1zEYlzarQrOXG90P3Is3efQI43p2YLW/rzSGdLb5MfQo2HvKT6Q5+tioMO045Q==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.1.1.tgz", + "integrity": "sha512-+q2UpWTqVi8GdlLoSlD5bS/YpxW+QMoBwrPrUH/NpvpuOi0Of7MTotsQf9JWd3hymZxl2uu1o3PIrbpxfeDFDQ==", "dependencies": { - "@docusaurus/core": "3.1.0", - "@docusaurus/types": "3.1.0", - "@docusaurus/utils-validation": "3.1.0", + "@docusaurus/core": "3.1.1", + "@docusaurus/types": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", "tslib": "^2.6.0" }, "engines": { @@ -2495,13 +2495,13 @@ } }, "node_modules/@docusaurus/plugin-google-gtag": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.1.0.tgz", - "integrity": "sha512-0txshvaY8qIBdkk2UATdVcfiCLGq3KAUfuRQD2cRNgO39iIf4/ihQxH9NXcRTwKs4Q5d9yYHoix3xT6pFuEYOg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.1.1.tgz", + "integrity": "sha512-0mMPiBBlQ5LFHTtjxuvt/6yzh8v7OxLi3CbeEsxXZpUzcKO/GC7UA1VOWUoBeQzQL508J12HTAlR3IBU9OofSw==", "dependencies": { - "@docusaurus/core": "3.1.0", - "@docusaurus/types": "3.1.0", - "@docusaurus/utils-validation": "3.1.0", + "@docusaurus/core": "3.1.1", + "@docusaurus/types": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", "@types/gtag.js": "^0.0.12", "tslib": "^2.6.0" }, @@ -2514,13 +2514,13 @@ } }, "node_modules/@docusaurus/plugin-google-tag-manager": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.1.0.tgz", - "integrity": "sha512-zOWPEi8kMyyPtwG0vhyXrdbLs8fIZmY5vlbi9lUU+v8VsroO5iHmfR2V3SMsrsfOanw5oV/ciWqbxezY00qEZg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.1.1.tgz", + "integrity": "sha512-d07bsrMLdDIryDtY17DgqYUbjkswZQr8cLWl4tzXrt5OR/T/zxC1SYKajzB3fd87zTu5W5klV5GmUwcNSMXQXA==", "dependencies": { - "@docusaurus/core": "3.1.0", - "@docusaurus/types": "3.1.0", - "@docusaurus/utils-validation": "3.1.0", + "@docusaurus/core": "3.1.1", + "@docusaurus/types": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", "tslib": "^2.6.0" }, "engines": { @@ -2532,16 +2532,16 @@ } }, "node_modules/@docusaurus/plugin-sitemap": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.1.0.tgz", - "integrity": "sha512-TkR5vGBpUooEB9SoW42thahqqwKzfHrQQhkB+JrEGERsl4bKODSuJNle4aA4h6LSkg4IyfXOW8XOI0NIPWb9Cg==", - "dependencies": { - "@docusaurus/core": "3.1.0", - "@docusaurus/logger": "3.1.0", - "@docusaurus/types": "3.1.0", - "@docusaurus/utils": "3.1.0", - "@docusaurus/utils-common": "3.1.0", - "@docusaurus/utils-validation": "3.1.0", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.1.1.tgz", + "integrity": "sha512-iJ4hCaMmDaUqRv131XJdt/C/jJQx8UreDWTRqZKtNydvZVh/o4yXGRRFOplea1D9b/zpwL1Y+ZDwX7xMhIOTmg==", + "dependencies": { + "@docusaurus/core": "3.1.1", + "@docusaurus/logger": "3.1.1", + "@docusaurus/types": "3.1.1", + "@docusaurus/utils": "3.1.1", + "@docusaurus/utils-common": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", "fs-extra": "^11.1.1", "sitemap": "^7.1.1", "tslib": "^2.6.0" @@ -2555,23 +2555,23 @@ } }, "node_modules/@docusaurus/preset-classic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.1.0.tgz", - "integrity": "sha512-xGLQRFmmT9IinAGUDVRYZ54Ys28USNbA3OTXQXnSJLPr1rCY7CYnHI4XoOnKWrNnDiAI4ruMzunXWyaElUYCKQ==", - "dependencies": { - "@docusaurus/core": "3.1.0", - "@docusaurus/plugin-content-blog": "3.1.0", - "@docusaurus/plugin-content-docs": "3.1.0", - "@docusaurus/plugin-content-pages": "3.1.0", - "@docusaurus/plugin-debug": "3.1.0", - "@docusaurus/plugin-google-analytics": "3.1.0", - "@docusaurus/plugin-google-gtag": "3.1.0", - "@docusaurus/plugin-google-tag-manager": "3.1.0", - "@docusaurus/plugin-sitemap": "3.1.0", - "@docusaurus/theme-classic": "3.1.0", - "@docusaurus/theme-common": "3.1.0", - "@docusaurus/theme-search-algolia": "3.1.0", - "@docusaurus/types": "3.1.0" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.1.1.tgz", + "integrity": "sha512-jG4ys/hWYf69iaN/xOmF+3kjs4Nnz1Ay3CjFLDtYa8KdxbmUhArA9HmP26ru5N0wbVWhY+6kmpYhTJpez5wTyg==", + "dependencies": { + "@docusaurus/core": "3.1.1", + "@docusaurus/plugin-content-blog": "3.1.1", + "@docusaurus/plugin-content-docs": "3.1.1", + "@docusaurus/plugin-content-pages": "3.1.1", + "@docusaurus/plugin-debug": "3.1.1", + "@docusaurus/plugin-google-analytics": "3.1.1", + "@docusaurus/plugin-google-gtag": "3.1.1", + "@docusaurus/plugin-google-tag-manager": "3.1.1", + "@docusaurus/plugin-sitemap": "3.1.1", + "@docusaurus/theme-classic": "3.1.1", + "@docusaurus/theme-common": "3.1.1", + "@docusaurus/theme-search-algolia": "3.1.1", + "@docusaurus/types": "3.1.1" }, "engines": { "node": ">=18.0" @@ -2594,22 +2594,22 @@ } }, "node_modules/@docusaurus/theme-classic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.1.0.tgz", - "integrity": "sha512-/+jMl2Z9O8QQxves5AtHdt91gWsEZFgOV3La/6eyKEd7QLqQUtM5fxEJ40rq9NKYjqCd1HzZ9egIMeJoWwillw==", - "dependencies": { - "@docusaurus/core": "3.1.0", - "@docusaurus/mdx-loader": "3.1.0", - "@docusaurus/module-type-aliases": "3.1.0", - "@docusaurus/plugin-content-blog": "3.1.0", - "@docusaurus/plugin-content-docs": "3.1.0", - "@docusaurus/plugin-content-pages": "3.1.0", - "@docusaurus/theme-common": "3.1.0", - "@docusaurus/theme-translations": "3.1.0", - "@docusaurus/types": "3.1.0", - "@docusaurus/utils": "3.1.0", - "@docusaurus/utils-common": "3.1.0", - "@docusaurus/utils-validation": "3.1.0", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.1.1.tgz", + "integrity": "sha512-GiPE/jbWM8Qv1A14lk6s9fhc0LhPEQ00eIczRO4QL2nAQJZXkjPG6zaVx+1cZxPFWbAsqSjKe2lqkwF3fGkQ7Q==", + "dependencies": { + "@docusaurus/core": "3.1.1", + "@docusaurus/mdx-loader": "3.1.1", + "@docusaurus/module-type-aliases": "3.1.1", + "@docusaurus/plugin-content-blog": "3.1.1", + "@docusaurus/plugin-content-docs": "3.1.1", + "@docusaurus/plugin-content-pages": "3.1.1", + "@docusaurus/theme-common": "3.1.1", + "@docusaurus/theme-translations": "3.1.1", + "@docusaurus/types": "3.1.1", + "@docusaurus/utils": "3.1.1", + "@docusaurus/utils-common": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", "@mdx-js/react": "^3.0.0", "clsx": "^2.0.0", "copy-text-to-clipboard": "^3.2.0", @@ -2633,17 +2633,17 @@ } }, "node_modules/@docusaurus/theme-common": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.1.0.tgz", - "integrity": "sha512-YGwEFALLIbF5ocW/Fy6Ae7tFWUOugEN3iwxTx8UkLAcLqYUboDSadesYtVBmRCEB4FVA2qoP7YaW3lu3apUPPw==", - "dependencies": { - "@docusaurus/mdx-loader": "3.1.0", - "@docusaurus/module-type-aliases": "3.1.0", - "@docusaurus/plugin-content-blog": "3.1.0", - "@docusaurus/plugin-content-docs": "3.1.0", - "@docusaurus/plugin-content-pages": "3.1.0", - "@docusaurus/utils": "3.1.0", - "@docusaurus/utils-common": "3.1.0", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.1.1.tgz", + "integrity": "sha512-38urZfeMhN70YaXkwIGXmcUcv2CEYK/2l4b05GkJPrbEbgpsIZM3Xc+Js2ehBGGZmfZq8GjjQ5RNQYG+MYzCYg==", + "dependencies": { + "@docusaurus/mdx-loader": "3.1.1", + "@docusaurus/module-type-aliases": "3.1.1", + "@docusaurus/plugin-content-blog": "3.1.1", + "@docusaurus/plugin-content-docs": "3.1.1", + "@docusaurus/plugin-content-pages": "3.1.1", + "@docusaurus/utils": "3.1.1", + "@docusaurus/utils-common": "3.1.1", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", @@ -2662,18 +2662,18 @@ } }, "node_modules/@docusaurus/theme-search-algolia": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.1.0.tgz", - "integrity": "sha512-8cJH0ZhPsEDjq3jR3I+wHmWzVY2bXMQJ59v2QxUmsTZxbWA4u+IzccJMIJx4ooFl9J6iYynwYsFuHxyx/KUmfQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.1.1.tgz", + "integrity": "sha512-tBH9VY5EpRctVdaAhT+b1BY8y5dyHVZGFXyCHgTrvcXQy5CV4q7serEX7U3SveNT9zksmchPyct6i1sFDC4Z5g==", "dependencies": { "@docsearch/react": "^3.5.2", - "@docusaurus/core": "3.1.0", - "@docusaurus/logger": "3.1.0", - "@docusaurus/plugin-content-docs": "3.1.0", - "@docusaurus/theme-common": "3.1.0", - "@docusaurus/theme-translations": "3.1.0", - "@docusaurus/utils": "3.1.0", - "@docusaurus/utils-validation": "3.1.0", + "@docusaurus/core": "3.1.1", + "@docusaurus/logger": "3.1.1", + "@docusaurus/plugin-content-docs": "3.1.1", + "@docusaurus/theme-common": "3.1.1", + "@docusaurus/theme-translations": "3.1.1", + "@docusaurus/utils": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", "algoliasearch": "^4.18.0", "algoliasearch-helper": "^3.13.3", "clsx": "^2.0.0", @@ -2692,9 +2692,9 @@ } }, "node_modules/@docusaurus/theme-translations": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.1.0.tgz", - "integrity": "sha512-DApE4AbDI+WBajihxB54L4scWQhVGNZAochlC9fkbciPuFAgdRBD3NREb0rgfbKexDC/rioppu/WJA0u8tS+yA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.1.1.tgz", + "integrity": "sha512-xvWQFwjxHphpJq5fgk37FXCDdAa2o+r7FX8IpMg+bGZBNXyWBu3MjZ+G4+eUVNpDhVinTc+j6ucL0Ain5KCGrg==", "dependencies": { "fs-extra": "^11.1.1", "tslib": "^2.6.0" @@ -2704,15 +2704,15 @@ } }, "node_modules/@docusaurus/tsconfig": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.1.0.tgz", - "integrity": "sha512-PE6fSuj5gJy5sNC1OO+bYAU1/xZH5YqddGjhrNu3/T7OAUroqkMZfVl13Tz70CjYB8no4OWcraqSkObAeNdIcQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.1.1.tgz", + "integrity": "sha512-FTBuY3KvaHfMVBgvlPmDQ+KS9Q/bYtVftq2ugou3PgBDJoQmw2aUZ4Sg15HKqLGbfIkxoy9t6cqE4Yw1Ta8Q1A==", "dev": true }, "node_modules/@docusaurus/types": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.1.0.tgz", - "integrity": "sha512-VaczOZf7+re8aFBIWnex1XENomwHdsSTkrdX43zyor7G/FY4OIsP6X28Xc3o0jiY0YdNuvIDyA5TNwOtpgkCVw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.1.1.tgz", + "integrity": "sha512-grBqOLnubUecgKFXN9q3uit2HFbCxTWX4Fam3ZFbMN0sWX9wOcDoA7lwdX/8AmeL20Oc4kQvWVgNrsT8bKRvzg==", "dependencies": { "@mdx-js/mdx": "^3.0.0", "@types/history": "^4.7.11", @@ -2730,11 +2730,11 @@ } }, "node_modules/@docusaurus/utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.1.0.tgz", - "integrity": "sha512-LgZfp0D+UBqAh7PZ//MUNSFBMavmAPku6Si9x8x3V+S318IGCNJ6hUr2O29UO0oLybEWUjD5Jnj9IUN6XyZeeg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.1.1.tgz", + "integrity": "sha512-ZJfJa5cJQtRYtqijsPEnAZoduW6sjAQ7ZCWSZavLcV10Fw0Z3gSaPKA/B4micvj2afRZ4gZxT7KfYqe5H8Cetg==", "dependencies": { - "@docusaurus/logger": "3.1.0", + "@docusaurus/logger": "3.1.1", "@svgr/webpack": "^6.5.1", "escape-string-regexp": "^4.0.0", "file-loader": "^6.2.0", @@ -2765,9 +2765,9 @@ } }, "node_modules/@docusaurus/utils-common": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.1.0.tgz", - "integrity": "sha512-SfvnRLHoZ9bwTw67knkSs7IcUR0GY2SaGkpdB/J9pChrDiGhwzKNUhcieoPyPYrOWGRPk3rVNYtoy+Bc7psPAw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.1.1.tgz", + "integrity": "sha512-eGne3olsIoNfPug5ixjepZAIxeYFzHHnor55Wb2P57jNbtVaFvij/T+MS8U0dtZRFi50QU+UPmRrXdVUM8uyMg==", "dependencies": { "tslib": "^2.6.0" }, @@ -2784,12 +2784,12 @@ } }, "node_modules/@docusaurus/utils-validation": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.1.0.tgz", - "integrity": "sha512-dFxhs1NLxPOSzmcTk/eeKxLY5R+U4cua22g9MsAMiRWcwFKStZ2W3/GDY0GmnJGqNS8QAQepJrxQoyxXkJNDeg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.1.1.tgz", + "integrity": "sha512-KlY4P9YVDnwL+nExvlIpu79abfEv6ZCHuOX4ZQ+gtip+Wxj0daccdReIWWtqxM/Fb5Cz1nQvUCc7VEtT8IBUAA==", "dependencies": { - "@docusaurus/logger": "3.1.0", - "@docusaurus/utils": "3.1.0", + "@docusaurus/logger": "3.1.1", + "@docusaurus/utils": "3.1.1", "joi": "^17.9.2", "js-yaml": "^4.1.0", "tslib": "^2.6.0" @@ -3070,9 +3070,9 @@ "integrity": "sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==" }, "node_modules/@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", "dependencies": { "@hapi/hoek": "^9.0.0" } @@ -4036,9 +4036,9 @@ } }, "node_modules/algoliasearch-helper": { - "version": "3.16.1", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.16.1.tgz", - "integrity": "sha512-qxAHVjjmT7USVvrM8q6gZGaJlCK1fl4APfdAA7o8O6iXEc68G0xMNrzRkxoB/HmhhvyHnoteS/iMTiHiTcQQcg==", + "version": "3.16.2", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.16.2.tgz", + "integrity": "sha512-Yl/Gu5Cq4Z5s/AJ0jR37OPI1H3+z7PHz657ibyaXgMOaWvPlZ3OACN13N+7HCLPUlB0BN+8BtmrG/CqTilowBA==", "dependencies": { "@algolia/events": "^4.0.1" }, @@ -7066,9 +7066,9 @@ } }, "node_modules/hast-util-raw": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.1.tgz", - "integrity": "sha512-5m1gmba658Q+lO5uqL5YNGQWeh1MYWZbZmWrM5lncdcuiXuo5E2HT/CIOp0rLF8ksfSwiCVJ3twlgVRyTGThGA==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.2.tgz", + "integrity": "sha512-PldBy71wO9Uq1kyaMch9AHIghtQvIwxBUkv823pKmkTM3oV1JxtsTNYdevMxvUHqcnOAuO65JKU2+0NOxc2ksA==", "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", @@ -8014,13 +8014,13 @@ } }, "node_modules/joi": { - "version": "17.11.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.11.0.tgz", - "integrity": "sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==", + "version": "17.12.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.12.1.tgz", + "integrity": "sha512-vtxmq+Lsc5SlfqotnfVjlViWfOL9nt/avKNbKYizwf6gsCfq9NYY/ceYRMFD8XDdrjJ9abJyScWmhmIiy+XRtQ==", "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", "@sideway/formula": "^3.0.1", "@sideway/pinpoint": "^2.0.0" } @@ -8425,9 +8425,9 @@ } }, "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", - "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "funding": [ { "type": "GitHub Sponsors", @@ -8794,9 +8794,9 @@ } }, "node_modules/micromark-core-commonmark/node_modules/micromark-util-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", - "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "funding": [ { "type": "GitHub Sponsors", @@ -8865,9 +8865,9 @@ } }, "node_modules/micromark-extension-directive/node_modules/micromark-util-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", - "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "funding": [ { "type": "GitHub Sponsors", @@ -8914,9 +8914,9 @@ } }, "node_modules/micromark-extension-frontmatter/node_modules/micromark-util-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", - "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "funding": [ { "type": "GitHub Sponsors", @@ -8982,9 +8982,9 @@ } }, "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", - "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "funding": [ { "type": "GitHub Sponsors", @@ -9054,9 +9054,9 @@ } }, "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", - "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "funding": [ { "type": "GitHub Sponsors", @@ -9155,9 +9155,9 @@ } }, "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", - "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "funding": [ { "type": "GitHub Sponsors", @@ -9236,9 +9236,9 @@ } }, "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", - "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "funding": [ { "type": "GitHub Sponsors", @@ -9314,9 +9314,9 @@ } }, "node_modules/micromark-extension-mdx-expression/node_modules/micromark-util-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", - "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "funding": [ { "type": "GitHub Sponsors", @@ -9388,9 +9388,9 @@ } }, "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-util-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", - "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "funding": [ { "type": "GitHub Sponsors", @@ -9473,9 +9473,9 @@ } }, "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", - "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "funding": [ { "type": "GitHub Sponsors", @@ -9527,9 +9527,9 @@ } }, "node_modules/micromark-factory-destination/node_modules/micromark-util-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", - "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "funding": [ { "type": "GitHub Sponsors", @@ -9582,9 +9582,9 @@ } }, "node_modules/micromark-factory-label/node_modules/micromark-util-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", - "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "funding": [ { "type": "GitHub Sponsors", @@ -9641,9 +9641,9 @@ } }, "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", - "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "funding": [ { "type": "GitHub Sponsors", @@ -9749,9 +9749,9 @@ } }, "node_modules/micromark-factory-title/node_modules/micromark-util-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", - "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "funding": [ { "type": "GitHub Sponsors", @@ -9823,9 +9823,9 @@ } }, "node_modules/micromark-factory-whitespace/node_modules/micromark-util-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", - "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "funding": [ { "type": "GitHub Sponsors", @@ -9944,9 +9944,9 @@ } }, "node_modules/micromark-util-classify-character/node_modules/micromark-util-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", - "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "funding": [ { "type": "GitHub Sponsors", @@ -10051,9 +10051,9 @@ } }, "node_modules/micromark-util-decode-string/node_modules/micromark-util-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", - "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "funding": [ { "type": "GitHub Sponsors", @@ -10226,9 +10226,9 @@ } }, "node_modules/micromark-util-sanitize-uri/node_modules/micromark-util-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", - "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "funding": [ { "type": "GitHub Sponsors", @@ -10345,9 +10345,9 @@ } }, "node_modules/micromark/node_modules/micromark-util-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", - "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "funding": [ { "type": "GitHub Sponsors", @@ -11910,9 +11910,9 @@ } }, "node_modules/property-information": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.4.0.tgz", - "integrity": "sha512-9t5qARVofg2xQqKtytzt+lZ4d1Qvj8t5B8fEwXK6qOfgRLgH/b13QlgEyDh033NOS31nXeFbYv7CLUDG1CeifQ==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.4.1.tgz", + "integrity": "sha512-OHYtXfu5aI2sS2LWFSN5rgJjrQ4pCy8i1jubJLe2QvMF8JJ++HXTUIVWFLfXJoaOfvYYjk2SN8J2wFUWIGXT4w==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" diff --git a/package.json b/package.json index e14040d8..22174b57 100644 --- a/package.json +++ b/package.json @@ -15,10 +15,10 @@ "typecheck": "tsc" }, "dependencies": { - "@docusaurus/core": "^3.1.0", - "@docusaurus/plugin-client-redirects": "^3.1.0", - "@docusaurus/plugin-content-blog": "^3.1.0", - "@docusaurus/preset-classic": "^3.1.0", + "@docusaurus/core": "^3.1.1", + "@docusaurus/plugin-client-redirects": "^3.1.1", + "@docusaurus/plugin-content-blog": "^3.1.1", + "@docusaurus/preset-classic": "^3.1.1", "@mdx-js/react": "^3.0.0", "autoprefixer": "^10.4.16", "clsx": "^2.0.0", @@ -29,9 +29,9 @@ "tailwindcss": "^3.4.0" }, "devDependencies": { - "@docusaurus/module-type-aliases": "^3.1.0", - "@docusaurus/tsconfig": "^3.1.0", - "@docusaurus/types": "^3.1.0", + "@docusaurus/module-type-aliases": "^3.1.1", + "@docusaurus/tsconfig": "^3.1.1", + "@docusaurus/types": "^3.1.1", "typescript": "~5.2.2" }, "browserslist": { diff --git a/sidebars.ts b/sidebars.ts index 00b4e1a3..3d051844 100644 --- a/sidebars.ts +++ b/sidebars.ts @@ -25,17 +25,17 @@ const sidebars: SidebarsConfig = { items: [ "get-started/signup", "get-started/add-repo", - // "get-started/customize-coderabbit", - // "get-started/prompt-customization", "get-started/analytics", - // "get-started/coderabbit-commands", - , ], }, { type: "category", label: "Guides", - items: ["guides/customize-coderabbit", "guides/prompt-customization", "guides/coderabbit-commands"], + items: [ + "guides/customize-coderabbit", + "guides/prompt-customization", + "guides/coderabbit-commands", + ], }, { type: "category",