Conversation
* Skip further syncing if we detect a network error * Make user identify calls tolerant towards connection loss * remove github status endpoint usage * Shouldn't be a breaking change * Persist the whole credentials structure to cache github username & other details * Better logging in Tauri * Fix tests * Add `credentials_upgrade` field to config to signal to FE * Explicitly propagate 401 errors early * Fix test * fix a typo * Use cached value instead of live * Fix user removals * Upgrade `gix` and `reqwest` * Upgrade all remaining compatible dependencies * add auth message for old users * improve check for credentials upgrade * improve message styling * Update expect tests * type fix * Revert "Update expect tests" This reverts commit ae27cae. * Revert "Upgrade all remaining compatible dependencies" This reverts commit 3dce10a. * Revert "Upgrade `gix` and `reqwest`" This reverts commit 999befe. * Add doc comment --------- Co-authored-by: anastasiia <anastasiya1155@gmail.com>
* set new env vars to config.json for github workflow * remove github client id from workflow * add closing speech marks --------- Co-authored-by: Gabriel Gordon-Hall <ggordonhall@gmail.com>
* add splash screen to tauri app until config returns response * add splash screen to tauri app until config returns response * remove circular progress * theme adjustments, fading animation * add localization * refetch config after a second after server started
* Separate out Embedder abstraction * Gather embed WIP * Batch embeddings * Support remote embedding generator * Return with the results if the queue is already empty * make embedding server url configurable via helm * Add better logging * Make cache management better contained * Use `/encode` as path for the query * fix qdrant deployment path * adding gzip compression for batched embedding response * Renamings * Rearrange embedder vs cache roles for batching * More renamings * RemoteEmbedder is ee --------- Co-authored-by: Gabriel Gordon-Hall <ggordonhall@gmail.com> Co-authored-by: rafael <22560219+rmuller-ml@users.noreply.github.com>
Co-authored-by: shoito <shoito@users.noreply.github.com>
* Specify on-disk qdrant collections * Address review comment
* Simplify caching dependencies * Moving closer to the parent obj * Synchronize caches & all databases * Comments & renamings * Address review comments
* add code-navigation utilites to code-studio (#881) - utility to extract the "value" of definitions: `ScopeGraph::value_of_definition` uses a heuristic to find a possible value for the definition. it is defined as the smallest surrounding scope or the largest adjacent scope. variable definitions or local definitions typically will not have an scope node "nearby", and their "value" can be assumed to span the containing line. - add /related-files endpoint: uses scope-graphs to calculate a closure of files related to a target file. request and response schema are subject to change. - add /token-value endpoint: exposes `ScopeGraph::value_of_definition` to the webserver. request and response schema are subject to change. * Add fuzzy path search endpoint (#883) * scratch implementation * tidy up * wip: remove type queries * wip: cleanup * fix failing test * address some review comments * Initial Code Studio API (#884) * Add initial code studio routes * Use path instead of query string in routes * Return token count in GET * Return 0 tokens for hidden files * Return new ID in `POST /studio` * Count full file tokens in studio when no ranges passed (#886) Passing `ranges: []` will now be interpreted as a whole-file inclusion in the studio. * classify related-files into files-importing and files-imported (#885) * classify related-files into files-importing and files-imported - files-imported: list of files imported in this file - files-importing: list of files importing this file these lists may have overlaps and may not be complete because they use just scope-graphs and not search-based navigation. * improve performance of /related-files - run files_imported and files_importing simultaneously; this should halve the response times - sprinkle `par_bridge`s around, this will no to much given we already have data-level parallelism at the top-level. there is more to gain on the table: the search-space can be reduced dynamically as we discover files; but this is probably not necessary for the time being. * Add `/studio/:id/generate` for response generation (#891) This route returns an SSE stream of `Result<String, String>`, which are JSON objects that look like: ``` {"Ok":"Some generated answer..."} ``` Or in the event of an error, with an error string: ``` {"Err":"some error string..."} ``` Streams are terminated with a `[DONE]` message. * add endpoint to add relevant chunks of related file (#897) * Add `/studio/import` (#895) This route accepts a query parameter in the form `?thread_id=...`. It must be called from a logged-in state. When successful, it will return a string for the new studio ID. A new studio is created with a name equal to the the conversation title and with its context imported, collapsing exchange code chunks. Additionally, `studio.context` JSON objects have been modified such that `branch` is now optional. * Count message and prompt tokens in studio (#900) Returned token count objects now look like: ``` { total: number, messages: number, per_file: [number] } ``` Note the addition of a new `messages` field. `messages` contains the token count of the current conversation, and `total` now also includes `messages` in the sum. Additionally, we count the number of tokens that are part of the base prompt, with the use of an empty context, and include this in the new `messages` count, and thus `total` count. * Add `DELETE /studio/:id` (#899) * Filter files imported to studio using GPT (#907) * Filter files imported to studio using GPT * Update server/bleep/src/webserver/studio.rs Co-authored-by: calyptobai <111788964+calyptobai@users.noreply.github.com> --------- Co-authored-by: calyptobai <111788964+calyptobai@users.noreply.github.com> * replace levenshtein fuzzy matching with skim fuzzy matcher (#906) this should work more like how sublime text's search. generally, the following changes in behavior are expected: - better search results for camel and snake-case identifiers: a corpus containing `scope_resolution` is matched by `scores` - ranks prefix matches higher: `res` matches both `resolution` and `progress`, but `resolution` will be ranked higher - ranks file hits higher than directory hits - ranks documents with hits near the file-stem higher than those with hits around the ancestor directories atleast one of the trigrams present in the query string must occur in the document. this gives us ~5x speedup on larger indexes. * only limit ranges of related-files if they are defs (#919) * Add CRUD template functionality (#915) * CRUD template functionality * Fix warnings * Add unit test default template and update sqlx offline build * Add some more default templates Unit test and code review * Fix newlines in default templates * Change primary key for templates to i64 * Ensure correct ID is returned for template creation * Update studio prompt * Add optional `?studio_id=...` parameter to `POST /studio/import` (#910) This makes it possible to import a conversation into an existing studio, merging contexts. * Parallelize token counting in studio (#925) * List studio repos and top file extension (#920) * return a list of used repos in code studio + most used file extension based on number of tokens * fix rustfmt * address review comments * fix sqlx data --------- Co-authored-by: Akshay <nerdy@peppe.rs> * Track studio generation and import events (#916) **WARNING: This will wipe the `studios` table when run. Studios are still an in-dev feature so this should not have consequences for any real users.** --- Now, we track successful studio import calls, and generation requests alongside associated response strings. A few things were changed here: - A new `StudioEvent` type was introduced, following the existing pattern for `QueryEvent` - Event filtering was only used with a boolean telemetry check, so this was cleaned up in order to support telemetry checks for non-query events - The `sqlx/uuid` feature was enabled so that we can natively use UUIDs in queries. **This required a migration to move away from `TEXT`-based UUIDs to `BLOB`-based UUIDs. All entries in `studios` are dropped.** Note that `QueryEvent` and `StudioEvent` are intentionally not merged, as the `QueryEvent` type must remain stable because our analytics database schema relies on the type in order to describe table columns. Rather, a similar event was added but specialized to Studio-related data. In the long term, we may want to consider a refactor to merge these two types, but this may require an analytics migration. * Implement snapshot-based studio history (#926) This PR adds "snapshots" to studios. By default, using the routes as before changes nothing, but new "snapshots" are created during `/import` and `/generate` calls. When a snapshot is taken, the current state is saved and duplicated. Most routes are by-default unaware of this, here are the complete changes: - `GET /studio` retrieves the full list of studios, each titled and dated by their latest snapshot - `GET /studio/:id` returns the "latest" snapshot, but optionally takes `?snapshot_id=...` - `PATCH /studio/:id` operates on the "latest" snapshot, but optionally takes `?snapshot_id=...` - `DELETE /studio/:id` works as before, but also deletes **all** associated snapshots - `POST /studio/:id/import` works as before, but now implicitly creates a new snapshot on successful import - `GET /studio/:id/generate` works as before, but now implicitly creates a new snapshot on successful generation To manage these snapshots, we add 2 new routes: - `GET /studio/:studio_id/snapshots` - This will return a list of snapshots, which look like: ```ts { id: number, modified_at: date string, context: [...], messages: [...] } ``` - `DELETE /studio/:studio_id/snapshots/:snapshot_id` - This deletes the snapshot * Take `user_id` into account for studio routes (#931) This adds a new `user_id` column to the `studios` table and ***will thus drop all existing studios to avoid a table with null IDs***. * Studio: get file tokens (#935) * add a separate endpoint to get file tokens * refactor: extract function * Add proxy billing routes (#933) Here, we add 2 new routes: - `GET /api/quota`: This will return an object like `{ upgraded: boolean, used: number, allowed: number }` - `GET /api/quota/create-checkout-session`: This will create a checkout session if the user is new, or if they have already purchased a plan, return a link to adjust the plan. The returned object looks like `{ url: string }`, with a Stripe URL. Additionally, each call to `/studio/:id/generate` will be quota-limited, such that after `used` hits the `allowed` request count, future calls will fail. The front-end can ensure we don't hit an error here by disabling the `Generate` button when the `used` value is above `allowed`. Note that the Answer API must be quota-enabled for this to work. Instructions are listed in commit 4902af68 for the relevant repo. * Change studio ID type from UUID to integer (#938) All uses of UUIDs to manage the `studios` table have been switched to a plain `INTEGER` as a primary key. **Warning**: This will drop the current studio tables. Given that a core ID was changed and the feature is not yet released, we just clear them instead of a more complex migration. * Proxy quota API `reset_at` field (#941) * Fix lints --------- Co-authored-by: akshay <nerdy@peppe.rs> Co-authored-by: Gabriel Gordon-Hall <ggordonhall@gmail.com> Co-authored-by: Louis Knight-Webb <louis@bloop.ai> Co-authored-by: Anastasiia Solop <35258279+anastasiya1155@users.noreply.github.com>
* create new type of tab * add new code studio tab * render code studios * add file to context, part 1 * refactoring * some fixes * select line ranges * mock related files * minor fixes * remember repo choice * use new api to search files * clear individual range * add apis * clear conversation * add related files * add related files * fix bug with range selector * add tokens usage colored circle * improved related files * templates tab * history tab * improve translations * small fixes * ensure range limits * do not allow adding same file multiple times * remove message from conversation * dirty implementation of answer generation * Louis/code studio frontend (#892) * Update how delete, hide/show and add related files are shown on each file row * Group files by repo / branch Update the token usage visual * scroll conversation to bottom * improve context file display name * code ranges select and scroll * fix scroll in conversation * improve markdown rendering * improve markdown rendering * ui fixes * search on home screen * add related files with ranges * fix conversation messages disappearing * import files and conversations to code studios * tiny patch * Louis/code studio tweaks (#909) * Improve loading state of conversations and add Hide input during generation Add retry option which removes all subsequent conversation turns * Lints and remove console logs * implement new apis * some fixes * add autosave every 2 seconds * make panels resizeable * skip repo selection for code studios with one repo * make sure file name is visible in related files dropdown * edit message button * auto-scroll to first range in file panel * reduce font size in conversation * fix margins between markdown elements * show full file path in tooltip * small fix * fix copy button * fix adding file to new code studio * merge ranges for related files before adding to context * fix syncing github repo * templates * allow importing chat into existing code studio * add language icon to code studio cards * Add cancel button to studio generation and move all buttons to bottom (#930) * stop generation, take 2 * rename code studio * move copy button * disable click on code studio card if repos are indexing * token limit exceded message * request related files only after click on button * design update to distinguish between user and assistant messages * use breadcrumbs for file name * implement history, first take (without using snapshot_id) * bigger language icons on code studio and repo cards * make panel resizer wider * fix no results message when searching repos/studios on home page * move history panel to third column * add submit/cancel buttons to file panel * disable selecting repos that are indexing * add templates shortcut * change input handling in conversation * move token limit exceeded message * Add invert and scroll with momentum * minor fixes * set last user message as input * open file panel on the right * fix switching between files * improve long studio names in cards * improve rendering large files * use opacity to indicate transition when switching between tabs * recalculate tokens in currently open file on each range change * billing * refetch quota on error * update user dropdown icons * fix search bar in file panel, show full breadcrumbs with fading * Copy changes to upgrade and quota (#940) * some fixes * refetch user quota once in 10 minutes and on code studio open * upgrade popup, rework restoring snapshot * fix types * fix selecting lines above/blow the screen --------- Co-authored-by: Louis Knight-Webb <louis@bloop.ai>
Japanese people find it easier to understand when the color is in English, so I improved it. Also improved the color order to match en.json. Co-authored-by: Anastasiia Solop <35258279+anastasiya1155@users.noreply.github.com>
* fix adding file to context when there are no code studios * sort studios in context selection list by last modified by default
* Catch non-existent files in studio functions * handle context unavailable on the FE --------- Co-authored-by: anastasiia <anastasiya1155@gmail.com> Co-authored-by: Anastasiia Solop <35258279+anastasiya1155@users.noreply.github.com>
Now, conversations will persist in the database even if they do not properly complete. Failed conversations are still not persisted with this change, intentionally.
* remove unused summary/conclusion logic * Set timestamp when concluding answer * Restore line number offset logic in transcoder, fix tests --------- Co-authored-by: calyptobai <calyptobai@gmail.com>
* check for low soft limit * remove hard limit check
* use keyword filter for path matches in proc * extract search params into struct * remove clippy allow * set exact_match to false for code search
…c tools (#1180) * saving work symbol tool add metadata to code tool chunks showing metadata add github to repo filter empty symbols fixing some bugs, dedup fmt adding aliases add code to symbol tool new prompt add chunk to exchanges adding symbol ids save work now working adding filter save work saving work remove function call get ref def outside of exchange impl agent refdef to chunks clean chunk generation filter_chunks filter_chunks in new file fix repo_ref add to proc delete symbol tool warnings adding constants relative_path field revert to text user query simplified repo_ref to accept github and local remove filter action, make a function for llm call better naming and adding comments fmt adding some error handling * fix error handling * clippy * fmt * wip: refactor changes * using snippet from file_symbol * adding repo_ref, reverting empty filter, adding filter comments * tokeninfo response not pub anymore * simplifying how we update path in a chunk * symbol alias instead of chunk alias * moving prompt to prompts.rs * reverting filter * fix unwrap in get_token_info * adding some comments * typo * better doc * make start_byte/end_byte usize and move function call def into prompts.rs * log selected symbol * unwrap_or_default * revert Cargo.lock * latency * use all hoverable symbols, tokeninfo only for the selected one * no function_calling * filter out local symbols * removing unused functions * clippy filter_map * prompt improved * fix explanation and add a const * reformat prompt and inline llm call * remove dbg! calls --------- Co-authored-by: Gabriel Gordon-Hall <ggordonhall@gmail.com> Co-authored-by: Akshay <nerdy@peppe.rs>
* translation fix, pull config on self-serve * fix line numbers in symbol search
fix assign clause in select statements create a new definition out of the ident used in assign clauses remove redundant tests
* wip: multi-repo
wip: multirepo
wip: multirepo
Use RepoPath in more places
Minor things
Clippy & some small things
Resurrect explain endpoint
Add Project to link references
Clean up call sites to semantic search
Always search on display name
We can propagate multiple repos, so this shouldn't be needed
Scope fuzzy queries to a project
Use RepoRef in RepoPath
Use RepoPath for relative_path refs
Add back sqlx data
Add back branch filters to fuzzy matching
This is just awful
Eh, need correct json here
---------
Co-authored-by: rsdy <p@symmetree.dev>
* update answer prompt for multi-repo
* WIP: projects
* WIP: projects
Back-end API changes include:
- Addition of `projects` table
- Studios now live *inside* a project
- Ownership was moved from studios to projects
- New routes:
- `GET /api/projects`: returns a list of:
`[ { id: number, name: string, modified_at: date string } ]`
- `POST /api/projects/`: takes in a body like:
`{ name: string | null }`
Note: there is a default name generated here if not provided, "New Project"
This route returns a string body which is the ID
- `GET /api/projects/:id`: if the project exists, returns:
`{ name: string }`
- `POST /api/projects/:id`: updates a project, takes a body of:
`{ name: string }`
Returns nothing
- Additionally, all `/api/studio/...` routes have been moved to
`/projects/:id/studios/..`
- Note: `studio` was changed to `studios`
- Note: all routes remain otherwise unchanged
* WIP: Projects
* WIP: Projects
* WIP: Projects
* WIP: Projects - refactoring conversation threads for multi-project context
* WIP: Projects
As part of this change, we add some new routes for project repo
associations.
- `GET /projects/:id/repos` returns a list of:
`[ { ref: string } ]`
- `POST /projects/:id/repos`: takes in a body like:
`{ ref: string }`
This adds the repo by repo ref to the list of repos in a project
- `DELETE /projects/:id/repos/:repo_ref` deletes the repo from the
project repo list
* WIP: Projects
As part of this change, we now return a complete `Repo` object when
retrieving `GET /projects/:id/repos`.
Tooling for the agent was also adjusted.
* WIP: Projects
Here, we add `most_common_langs` to `GET /projects` and`GET /projects/:id`
We also add routes for project to doc associations.
- `GET /projects/:id/docs` returns a list of:
```
[
{
id: number,
url: string,
index_status: string,
name: null | string,
favicon: null | string,
description: null | string,
modified_at: date string,
}
]
```
- `POST /projects/:id/docs`: takes in a body like:
`{ doc_id: number }`
This adds the doc by ID to the list of docs in a project
- `DELETE /projects/:id/docs/:doc_id` deletes the doc from the project doc
list
* WIP: Projects
Add branches to `project_repo` associations
* WIP: Projects
Add constraints and foreign keys on new project models
* WIP: Projects
Amongst other patches, we introduce some API changes here.
- We move `/q` to `/projects/:id/q`:
- This no longer takes a `repo_ref` argument. Now, this route will
infer the related repositories based on repos associated with the
requested project.
- We move `/search/path` to `/projects/:id/search/path`
- We add a new `GET /folder` route, which is like `/file` but retrieves
directory data. Internally, this route makes an `open:`-style query.
* fix repo tantivy search (#1174)
* Fix conversation store/load
* Add `PUT /projects/:id/repos`, change `DELETE /projects/:id/repos/:id`
We add `PUT /projects/:id/repos`, which accepts an object:
```
{ "ref": repo ref, "branch": branch name or NULL }
```
Additionally, `DELETE /projects/:id/repos/:repo_ref` was changed to just
`DELETE /projects/:id/repos/:id`, where the `repo_ref` value was moved
to a JSON object in the request body:
```
{ "ref": repo ref }
```
* Avoid JSON body in `DELETE /projects/:id/repos`
Now, we use a query parameter to indicate the repo ref: `?ref=...`
* Filter repos in semantic search by query repos, if present
* Sync docs in background, whether stream still exists
* Return thread_id in conversation routes
- `GET /projects/:id/conversations/:id` now returns an object like:
```
{ thread_id: string, exchanges: [...] }
```
Note that previously, this just returned the list of exchanges.
- `GET /projects/:id/conversations` now returns an additional field in
each item:
```
{ thread_id: string, ...previous fields }
```
* Fix handling of `conversation_id` with `/answer`
* Fix routing for `DELETE /projects/:id/conversations/:id`
* Use `conversation_id` instead of `thread_id` in `GET /answer`
Rather than returning an initial JSON object, we introduce a new
`ChatEvent` type, and return the conversation ID on stream end upon
successful store.
* Return errors with debug formatting
* Fix more rebase errors
* Indexing status reporting improvements (#1192)
* repo index status reporting fixes
* report whether is resync in index progress
* rework sync logic for docs (#1186)
* rework sync logic for docs
- replace `/sync` with `/enqueue`; a non-streaming replacement to add
items to the doc-sync queue
- introduce `/status` and `/cancel`; to stream updates for a syncing
document or to cancel a sync job
- convert `/resync` to http from sse
- internal updates to `/list` to work with the new queue system
* track metadata update in progress stream
* handle possible error state
* Fix tests
* Run cargo fmt
* Path search edits (#1200)
* add repo name to path tool answer, use skim_fuzzy_path_match instead of fuzzy_path_match and use only repos from the project
* filter fuzzy path search by language and remove unused code paths
---------
Co-authored-by: rafael <22560219+rmuller-ml@users.noreply.github.com>
* Add repos to answer action prompt and step prompt (#1198)
* Add repos to answer action prompt and step prompt
* limit number of tokens for symbol classification
* tweak prompt text
---------
Co-authored-by: Gabriel Gordon-Hall <ggordonhall@gmail.com>
* Restrict queries on `/q` to only return results valid for a project (#1203)
We rewrite the parsed set of queries to restrict them such that they only return valid results.
* Restrict queries on `/q` to only return results valid for a project
* Add project ID to autocomplete
* Fix repo autocomplete
* fix default for repo deduplication in semantic search
* Fix autocomplete for path and lang queries
* Send back context data in studio list route
* Fix code search on local repos (#1204)
* Fix code search on local repos
We were making semantic queries with the full stringified repo ref.
Instead, we should have been constructing a semantic query using the
repository display name.
It seems that this was fixed coincidentally in #1190 via a condition
(which might now be possible to remove).
* Use indexed name in semantic query construction
* Add fields to list studios (projects) (#1205)
* return token counter, doc_context and full context in list studios route
* make studio prompt multi-repo (#1208)
* save onboarding status on user profile (#1210)
* Anastasiia/autocomplete page size (#1211)
don't override page_size from api_params
* return token counts for studio snapshots (#1212)
* fix clippy (#1213)
* return None if parent commit does not exist (#1214)
* fix SQL query that retrieves a list of docs for project (#1216)
* Fix autocomplete repo match (#1218)
* make repo_name ; make autocomplete and folder queries case insensitive; remove repo.display_name()
* use stringified repo_ref in prompt
* bump version to 0.6.0
* fix blocking status endpoint (#1217)
the status reporting endpoint can drop the lock over the tantivy index
once it has a handle to the progress stream.
* Migrate existing databases to new project schema
* Fix lints
* app redesign
* disable right click in prod mode
* add files to code studio
* project dependant autocomplete
* some fixes
* add selection hint
* studio conversation
* studio conversation design fixes
* studio navigation using left sidebar
* indexing docs, add docs to projects
* some fixes
* add docs to studios
* polishing studios
* usage popover
* add tutorial cards
* search docs
* fixes
* quick fix
* minor fixes
* fix apply diff
* feedback fixes
* feedback fixes 2
* feedback fixes 3
* dedupe studios, pass page_size to autocomplete
* studio response loading state
* studio history
* add repo to project when it finished indexing
* ensure there are no duplicates in file search, fix error handling in chat
* testing fixes
* add missing translations, clean up locales files
* doc fixes
* improve mouse handling in arrow navigation is command bar
* testing fixes
* rework arrow navigation
* rework arrow navigation, use context
* add arrow navigation to all dropdowns
* minor fixes
* improve header wrapping when adding to studio
---------
Co-authored-by: Gabriel Gordon-Hall <ggordonhall@gmail.com>
Co-authored-by: rsdy <p@symmetree.dev>
Co-authored-by: calyptobai <calyptobai@gmail.com>
Co-authored-by: akshay <nerdy@peppe.rs>
Co-authored-by: rafael <22560219+rmuller-ml@users.noreply.github.com>
Co-authored-by: calyptobai <111788964+calyptobai@users.noreply.github.com>
* focus first item on search changed * fix model param name * set focus on the panel where user types, fix scroll to line when clicking from chat * fix missing highlights in left sidebar for currently focused tab * fix long names in command bar items * don't add repos to project automatically, but add a button to 'indexing finished' toast
This fixes code search against repos where the name is longer than 5 characters. The general strategy here is to bail out of case permutations if any tokens in the generated token stream are too long. This means that for a query like `repo:foobar quux`, the `quux` portion will match in a case-insensitive fashion, while the repo `foobar` must match case exactly.
* support alternative input type for chinese users * add input type to settings to allow users to choose input type
* handle agent symbol resolution panics * fix compile errors * revert clippy allows
* detach input value from chat persistent state * fix ts error
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by
pull[bot]
Can you help keep this open source service alive? 💖 Please sponsor : )