This PR changes the default credentials provider used in developments
builds of Zed to the development credentials provider.
Previously this required setting `ZED_DEVELOPMENT_AUTH=1` in order to
opt-in to the development credentials provider.
This led to confusion for new Zed employees who did not know that this
environment variable existed.
If you do need to interact with the system keychain for some reason, you
can run Zed with:
```
ZED_DEVELOPMENT_USE_KEYCHAIN=1
```
`ZED_DEVELOPMENT_AUTH` is dead. Long live Zed development auth!
Release Notes:
- N/A
This PR adds a new `CredentialsProvider` trait that abstracts over
interacting with the system keychain.
We had previously introduced a version of this scoped just to Zed auth
in https://github.com/zed-industries/zed/pull/11505.
However, after landing https://github.com/zed-industries/zed/pull/25123,
we now have a similar issue with the credentials for language model
providers that are also stored in the keychain (and thus also produce a
spam of popups when running a development build of Zed).
This PR takes the existing approach and makes it more generic, such that
we can use it everywhere that we need to read/store credentials in the
keychain.
There are still two credential provider implementations:
- `KeychainCredentialsProvider` will interact with the system keychain
(using the existing GPUI APIs)
- `DevelopmentCredentialsProvider` will use a local file on the file
system
We only use the `DevelopmentCredentialsProvider` when:
1. We are running a development build of Zed
2. The `ZED_DEVELOPMENT_AUTH` environment variable is set
- I am considering removing the need for this and making it the default,
but that will be explored in a follow-up PR.
Release Notes:
- N/A
This PR fixes a comment in the `cli` crate that seems to have been
inadvertently changed in #25185.
I also reworded it to be a bit more formal.
Release Notes:
- N/A
This PR adds a new `allow_rewrap` setting to control how
`editor::Rewrap` behaves for a given language.
This is a language setting, so it can either be configured globally or
within the context of an individual language.
For example:
```json
{
"allow_rewrap": "in_selections",
"languages": {
"Typst": {
"allow_rewrap": "anywhere"
}
}
}
```
There are three different values:
- `in_comment`: Only perform rewrapping within comments.
- `in_selections`: Only perform rewrapping within the current
selection(s).
- `anywhere`: Allow rewrapping anywhere.
The global default is `in_comment`, as it is the most conservative
option and allows rewrapping comments without risking breaking other
syntax.
The `Markdown` and `Plain Text` languages default to `anywhere`, which
mirrors the previous behavior for those language that was hard-coded
into the rewrap implementation.
This setting does not have any effect in Vim mode, as Vim mode already
allowed rewrapping anywhere.
Closes https://github.com/zed-industries/zed/issues/24242.
Release Notes:
- Added an `allow_rewrap` setting to control the `editor::Rewrap`
behavior for a given language.
This PR fixes an issue where configured language model providers would
not show up unless the configuration view was opened.
The problem was that we were filtering unauthenticated language model
providers out of the language model selector, but would only
authenticate the active provider when the selector loaded.
Authenticating the rest of the providers was deferred until the
configuration view was opened for the first time.
Closes https://github.com/zed-industries/zed/issues/21821.
Release Notes:
- Fixed an issue where configured languages models were not showing up
in the language model selector until the configuration view was opened
for the first time.
This PR updates the `LanguageModelProvider::authenticate` method to
return an `AuthenticateError` instead of an `anyhow::Error`.
This allows us to model the "credentials not found" state explicitly as
`AuthenticateError::CredentialsNotFound`, which enables the caller to
check for this state and act accordingly.
Planning to use this in #25123 to silence errors about missing
credentials when authenticating providers in the background.
Release Notes:
- N/A
This PR fixes an issue where the thread history would only work in one
Zed window at a time.
The backing LMDB database can only be opened once per Zed instance.
However, the `ThreadStore` has one instance per Zed window.
To fix this, we need to create the `heed` environment once and store it
as a global, and then reference the same environment across all of the
`ThreadStore`s.
Release Notes:
- N/A
This PR makes it so we don't log errors for missing themes or icon
themes until after the extensions have been loaded.
Currently, if you are using a theme that is defined in an extension it
is common to see one or more "theme not found" errors in the logs. This
is the result of us having to initialize the theme before the extensions
have actually finished loading.
This means that a theme that _may_ exist once extensions load is
considered non-existent before they have loaded.
To that end, we now wait until the extensions have loaded before we
start logging errors if we can't find the theme or icon theme.
Closes https://github.com/zed-industries/zed/issues/24539.
Release Notes:
- Reduced the number of "theme not found" and "icon theme not found"
errors in the logs for themes provided by extensions.
This PR updates the `ThemeRegistry` to return structured errors from the
`get` and `get_icon_theme` methods (which are used to retrieve themes
and icon themes, respectively).
We want to be able to carry the name of the theme that was not found as
state on the error, which is why we use a `Result` and not an `Option`.
However, we also want to be able to accurately identify when the error
case is "not found" so we can take appropriate action, based on the
circumstances.
By using a custom error type instead of an `anyhow::Error`, we get both.
There isn't any functional change in this PR. This just sets us up for
future improvements in this error.
Release Notes:
- N/A
This PR adds the ability for icon themes to provide their own file
associations.
The old `file_types.json` that was previously used to make these
associations has been removed in favor of storing them on the default
theme.
Icon themes have two new fields on them:
- `file_stems`: A mapping of file stems to icon keys.
- `file_suffixes`: A mapping of file suffixes to icon keys.
These mappings produce icon keys which can then be used in `file_icons`
to associate them to a particular icon:
```json
{
"file_stems": {
"Makefile": "make"
},
"file_suffixes": {
"idr": "idris"
},
"file_icons": {
"idris": { "path": "./icons/idris.svg" },
"make": { "path": "./icons/make.svg" }
}
}
```
When loading an icon theme, the `file_stems` and `file_icons` fields
will be merged with the ones from the base icon theme, with the values
from the icon theme being loaded overriding ones in the base theme.
Release Notes:
- Added the ability for icon themes to provide their own file
associations.
This PR sorts the `file_types.json` file alphabetically.
This is the command I used to sort it:
```
pnpm --package=json-sort-cli dlx jsonsort assets/icons/file_icons/file_types.json
```
Release Notes:
- N/A
This PR fixes the issue response script.
There were a number of things preventing it from working:
- The directory name used in the GitHub Action did not match the one on
disk.
- The script has been moved accordingly
- `ts-node` does not support ESM.
- `ts-node` seems unmaintained, so I changed the script to be plain JS
that is type-checked with TypeScript.
- The data being sent to the Slack API was invalid:
- Each section block can only have a maximum of 3000 characters in the
`text` field, so we need to break up the issue list across multiple
sections.
- We needed to escape `&`, `<`, and `>` characters in the issue titles.
Release Notes:
- N/A
This PR adds `.dev.vars` files as a default exclusion for edit
prediction.
These files are used by Cloudflare Workers and are likely to contain
secrets.
Release Notes:
- Excluded Cloudflare Workers `.dev.vars` files from edit prediction.
This PR removes the `predict-edits-launch` feature flag that was added
in #24720.
We don't need this anymore now that we've launched!
Release Notes:
- N/A
This PR makes it so Zeta respects the `x-zed-minimum-required-version`
header sent back from the server.
If the current Zed version is strictly less than the indicated minimum
required version, we show an error indicating that an update is required
in order to continue using Zeta:
<img width="472" alt="Screenshot 2025-02-12 at 6 15 44 PM"
src="https://github.com/user-attachments/assets/51b85dff-23a0-464c-ae4b-5b8f46b5915c"
/>
Release Notes:
- N/A
This PR puts the "Eager Preview Mode" menu entry behind a feature flag
rather than a staff flag.
Currently it defaults to `false` for staff so that it doesn't leak into
any marketing/launch materials.
Folks who want to see it can opt-in to the flag explicitly, for now.
Release Notes:
- N/A
This PR adds support for configuring both a light and dark icon theme in
`settings.json`.
In addition to accepting just an icon theme name, the `icon_theme` field
now also accepts an object in the following form:
```jsonc
{
"icon_theme": {
"mode": "system",
"light": "Zed (Default)",
"dark": "Zed (Default)"
}
}
```
Both `light` and `dark` are required, and indicate which icon theme
should be used when the system is in light mode and dark mode,
respectively.
The `mode` field is optional and indicates which icon theme should be
used:
- `"system"` - Use the icon theme that corresponds to the system's
appearance.
- `"light"` - Use the icon theme indicated by the `light` field.
- `"dark"` - Use the icon theme indicated by the `dark` field.
Closes https://github.com/zed-industries/zed/issues/24695.
Release Notes:
- Added support for configuring both a light and dark icon theme and
switching between them based on system preference.
This PR updates the `GET /user` endpoint to update the user's email and
name from the provided GitHub profile information on sign-in.
Currently, these fields were only set when the user was first created.
Release Notes:
- N/A
This PR does some clean up for the edit predictions settings:
- Removed `editor.show_edit_predictions_in_menu`
- Renamed `edit_predictions.inline_preview` to `edit_predictions.mode`
Release Notes:
- N/A
---------
Co-authored-by: Agus Zubiaga <agus@zed.dev>
This PR adds the ability to change the predict edits URL using the
`ZED_PREDICT_EDITS_URL` environment variable.
This allows for easily pointing Zed to a development version of the
Cloudflare Worker.
Release Notes:
- N/A
This PR updates the asset paths used in more GPUI examples such that
they work when run from the repository root or from within
`crates/gpui`.
Release Notes:
- N/A
This PR updates the file icon mappings such that Markdown (`.md`,
`.markdown`) files map to the `markdown` key.
Release Notes:
- Icon themes: Added the ability to change the file icon for Markdown
(`.md`, `.markdown`) files.
This PR updates the GPUI `image` example such that it works when run in
the following ways:
- `cargo run -p gpui --example image` from the repository root
- `cargo run --example image` from within `crates/gpui`
Release Notes:
- N/A
This PR updates the file icon mappings such that Svelte (`.svelte`)
files map to the `svelte` key.
Release Notes:
- Icon themes: Added the ability to change the file icon for Svelte
(`.svelte`) files.
This PR pins Prettier to a specific version when we run the docs
formatting check.
This should prevent drift when new Prettier versions are released that
may impact the formatting.
Release Notes:
- N/A
This PR updates the edit predictions to include the prediction ID
returned from the server on the resulting telemetry events indicating
whether the prediction was accepted or discarded.
The `prediction_id` on the events can then be correlated with the
`request_id` on the server-side prediction events.
Release Notes:
- N/A
This PR fixes an issue where the Assistant patch block was not being
rendered when using "Suggest Edits".
The issue was that the `BlockContext` already has a borrow of the
`Window`, so we can't use `update_in` to reborrow the window.
The fix is to reuse the existing `&mut Window` reference from the
`BlockContext` so we don't need to `update_in`.
Closes#24169.
Release Notes:
- Assistant: Fixed an issue where the patch block was not being rendered
when using "Suggest Edits".
---------
Co-authored-by: Max <max@zed.dev>
This PR makes it so we send up the diagnostic groups as additional data
with the edit prediction request.
We're not yet making use of them, but we are recording them so we can
use them later (e.g., to train the model).
Release Notes:
- N/A
---------
Co-authored-by: Nathan <nathan@zed.dev>
This PR adds the general structure for filtering the extensions list by
what the extensions provide.
Currently flagged for Zed staff until we get some design direction on
how best to present the filter.
Release Notes:
- N/A
This PR updates the file icon mappings such that HTML (`.html` and
`.htm`) files map to the `html` key.
This allows for the HTML file icons to be replaced in icon themes.
Release Notes:
- Icon themes: Added the ability to change the file icon for HTML
(`.html`, `.htm`) files.
This PR adds the ability to filter extension results from the extension
API by the features that they provide.
For instance, to filter down just to extensions that provide icon
themes:
```
https://api.zed.dev/extensions?provides=icon-themes
```
Release Notes:
- N/A
This PR adds new columns to the `extension_versions` table to record
which features an extension provides.
These `provides_*` columns are populated from the `provides` field on
the extension manifest.
We'll be able to leverage this data in the future for showing what an
extension provides in the extensions UI, as well as allowing to filter
by extensions that provide a certain feature.
Release Notes:
- N/A
This PR removes the `name` field from under `lib` in the `Cargo.toml`
file for the `panel` crate, as it isn't necessary.
Also removed it from `script/new-crate`.
Release Notes:
- N/A
This PR updates the Zed extension CLI with support for populating the
`provides` field in the generated extension manifest.
This field will contain the set of features that the extension provides.
For example:
```
"provides": ["themes", "icon-themes"]
```
Release Notes:
- N/A
This PR updates the check that prevents subscribing with overdue
subscriptions to use the `billing_customers.has_overdue_invoices` field
instead.
This will allow us to set the value of `has_overdue_invoices` to `false`
when the invoices have been paid.
Release Notes:
- N/A
This PR adds a new `has_overdue_invoices` field to the
`billing_customers` table.
This will be used to statefully track whether a customer has overdue
invoices, and also to reset it when the invoices are paid.
We will set this field to `true` when a subscription is canceled with
the reason `payment_failed`.
Release Notes:
- N/A
This PR updates the `zeta` crate to use the predictive edit DTOs defined
in the `zed_llm_client` crate.
This way we aren't duplicating their definitions (and risk them going
out of sync).
Release Notes:
- N/A
This PR renames some bindings from `data_collection_permission` back to
`can_collect_data`, as the latter name is clearer on account of being a
modal verb.
Release Notes:
- N/A
This PR removes the `em_width` and `em_advance` parameters to
`EditorSnapshot::gutter_dimensions` in favor of computing the values
inside of it.
In practice all of the callers were passing in the same values, and
there isn't a circumstance where we would want to pass in different
values.
`gutter_dimensions` has also been modified to return
`Option<GutterDimensions>` instead of `GutterDimensions` so that we can
remove some `.unwrap`s when interacting with the text system.
Release Notes:
- N/A
This PR adds a new `wait_for_flag_or_timeout` method to the
`FeatureFlagAppExt` trait.
This encapsulates the somewhat gnarly code for using `wait_for_flag`
with a timeout.
A side benefit of this is that the tasks waiting on the feature flags
run in parallel, so in the case where the feature flags do not resolve
we don't end up having to wait on consecutive timeouts. This should help
a bit with https://github.com/zed-industries/zed/issues/23922.
Release Notes:
- N/A
This PR changes the `ContextStore` constructor to not block on reloading
the contexts before we finish initializing it.
I noticed that the Assistant panel was taking a long time to show up in
the status bar, and upon further investigation uncovered that with a
large number of contexts (I have ~320) it takes a long time to load them
all.
Release Notes:
- N/A
This PR adds two helpers methods to the `TextSystem`:
- `em_width`
- `em_advance`
These methods return the width and advance width for an `em`,
respectively.
We were using these definitions in a number of different spots, and by
unifying them we better canonicalize that an `em` is based on the `m`
character.
Release Notes:
- N/A
This PR removes the `POST /predict_edits` endpoint from the LLM service,
as it has been superseded by the corresponding endpoint running in
Cloudflare Workers.
All traffic is already being routed to the Cloudflare Workers via the
Workers route, so nothing is hitting this endpoint running in the LLM
service anymore.
You can see the drop off in requests to this endpoint on this graph when
the Workers route was added:
<img width="472" alt="Screenshot 2025-01-30 at 9 18 04 PM"
src="https://github.com/user-attachments/assets/fa60f7c8-2737-4329-88a3-17093bdb5a29"
/>
We also don't use the `fireworks` crate anymore in this repo, so it has
been removed.
Release Notes:
- N/A
This PR changes the edit predictions URL for Zed Staff back to
`llm.zed.dev/predict_edits`.
This endpoint is now being routed to the Cloudflare Workers instead of
the LLM service.
Release Notes:
- N/A
This PR makes it so when you install an extension with icon themes it
will deploy the icon theme selector filtered down to the newly-installed
icon themes.
This is similar to what we do when installing an extension with themes.
Because we can only have one picker open at a time, when installing an
extension that has _both_ themes and icon themes, the theme selector
will take precedence.
Release Notes:
- N/A
This PR adds a `schema_generator` crate that can be used to generate our
various JSON schemas for publishing elsewhere.
Currently it does the simplest thing possible and just prints the JSON
schema to stdout. We can make this a but more robust later.
I also removed the schema-printing facilities from the `theme_importer`,
as they don't really make sense there.
Release Notes:
- N/A
This PR adds support for icon themes.
Closes https://github.com/zed-industries/zed/issues/8843.
Here is Zed with Material Icons:
<img width="1136" alt="Screenshot 2025-01-30 at 7 02 06 PM"
src="https://github.com/user-attachments/assets/57d8a0e0-ff38-44d9-8628-af58a60a7c9a"
/>
### Extensions
Extensions can provide icon themes as well as the icons used in those
themes.
Icon themes are defined as JSON files in the `icon_themes` directory,
and icons included in the `icons` directory will be packaged up with the
extension.
All icon paths within an icon theme are interpreted relative to the root
of the extension.
See the [Material Icon
Theme](https://github.com/zed-extensions/material-icon-theme) extension
for an example.
Release Notes:
- Added support for icon themes.
- Extensions can now provide icon themes.
- Use the `icon theme selector: toggle` action to switch between
installed icon themes.
This PR fixes an issue where we weren't properly resolving directory and
chevron icons from icon themes the way we were for file icons.
We need to interpret the icon paths as relative to the extension
directory.
Release Notes:
- N/A
This PR updates the Zed extension CLI with support for packaging
extensions containing icon themes.
The `icons` directory in the extension will be copied into the packaged
extension to facilitate distributing icon files.
Release Notes:
- N/A
This PR unships tool use from Assistant1.
This was only ever partially implemented, and was never released to end
users.
Assistant2 will support tool use.
Release Notes:
- N/A
This PR fixes the license for the `anthropic` crate.
It was mistakenly licensed as AGPL, despite being used outside of
collab. It should be licensed as GPL.
Release Notes:
- N/A
This PR makes it so staff edit predictions now go through Cloudflare
Workers instead of going to the LLM service.
This will allow us to dogfood the new LLM worker to make sure it is
working as expected.
Release Notes:
- N/A
This PR adds a new internal `POST /snowflake/events` endpoint to collab.
This endpoint is protected with the admin token like our other internal
endpoints.
This endpoint accepts a `SnowflakeRow` in the body and writes it to the
AWS Kinesis stream.
Release Notes:
- N/A
This PR fixes a typo in the error that occurs when trying to construct
an AWS Kinesis client and the `kinesis_region` value is missing.
Release Notes:
- N/A
This PR updates the GitHub Action definitions to restrict more CI jobs
to only run in the `zed-industries` organization (and thus, not on
forks).
Release Notes:
- N/A
This PR fixes an issue introduced in
https://github.com/zed-industries/zed/pull/20551/ that would prevent
models with unknown IDs from working in the LLM service.
We only need to look up a model from its ID for the beta headers, and if
we can't find that particular model we should fall back to the default
beta headers instead of bailing out completely,
Release Notes:
- N/A
This PR changes the `ThreadStore` constructor to not block on reloading
the threads before we finish initializing it.
This allows us to make the constructor synchronous instead of
asynchronous.
Release Notes:
- N/A
This PR fixes an issues where clicking the "Open Configuration" button
wasn't opening the configuration.
We needed to change how the action was dispatched after #22632.
Release Notes:
- N/A
This PR adds some logging so we can debug the issues some folks have
been having with Assistant2 not getting initialized properly.
All the logs are prefixed with `[assistant2-debug]` so they're easier to
pick out of the logs, as well as find them later to clean up once we've
diagnosed the issue.
Release Notes:
- N/A