diff --git a/.cloudflare/README.md b/.cloudflare/README.md
index d21377ddffd425..8da1a129fee25c 100644
--- a/.cloudflare/README.md
+++ b/.cloudflare/README.md
@@ -4,11 +4,11 @@ from Cloudflare.
- `open-source-website-assets` is used for `install.sh`
- `docs-proxy` is used for `https://zed.dev/docs`
-On push to `main`, both of these (and the files they depend on) are uploaded to Cloudflare.
+During docs deployments, both of these (and the files they depend on) are uploaded to Cloudflare.
### Deployment
-These functions are deployed on push to main by the deploy_cloudflare.yml workflow. Worker Rules in Cloudflare intercept requests to zed.dev and proxy them to the appropriate workers.
+These functions are deployed by the docs deployment workflows. Worker Rules in Cloudflare intercept requests to zed.dev and proxy them to the appropriate workers.
### Testing
diff --git a/.cloudflare/docs-proxy/src/worker.js b/.cloudflare/docs-proxy/src/worker.js
index f9f441883ad9b8..08b0265fafbbb0 100644
--- a/.cloudflare/docs-proxy/src/worker.js
+++ b/.cloudflare/docs-proxy/src/worker.js
@@ -1,7 +1,22 @@
export default {
async fetch(request, _env, _ctx) {
const url = new URL(request.url);
- url.hostname = "docs-anw.pages.dev";
+
+ if (url.pathname === "/docs/nightly") {
+ url.hostname = "docs-nightly.pages.dev";
+ url.pathname = "/docs/";
+ } else if (url.pathname.startsWith("/docs/nightly/")) {
+ url.hostname = "docs-nightly.pages.dev";
+ url.pathname = url.pathname.replace("/docs/nightly/", "/docs/");
+ } else if (url.pathname === "/docs/preview") {
+ url.hostname = "docs-preview-5xd.pages.dev";
+ url.pathname = "/docs/";
+ } else if (url.pathname.startsWith("/docs/preview/")) {
+ url.hostname = "docs-preview-5xd.pages.dev";
+ url.pathname = url.pathname.replace("/docs/preview/", "/docs/");
+ } else {
+ url.hostname = "docs-anw.pages.dev";
+ }
let res = await fetch(url, request);
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
index 9bf14ce72d5feb..628579b2340d8a 100644
--- a/.github/ISSUE_TEMPLATE/config.yml
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -2,7 +2,7 @@
blank_issues_enabled: false
contact_links:
- name: Feature request
- url: https://github.com/zed-industries/zed/discussions/new/choose
+ url: https://github.com/zed-industries/zed/discussions/new?category=feature-requests
about: To request a feature, open a new discussion under one of the appropriate categories.
- name: Our Discord community
url: https://discord.com/invite/zedindustries
diff --git a/.github/actions/build_docs/action.yml b/.github/actions/build_docs/action.yml
deleted file mode 100644
index 002f6f4653f894..00000000000000
--- a/.github/actions/build_docs/action.yml
+++ /dev/null
@@ -1,46 +0,0 @@
-name: "Build docs"
-description: "Build the docs"
-
-runs:
- using: "composite"
- steps:
- - name: Setup mdBook
- uses: peaceiris/actions-mdbook@ee69d230fe19748b7abf22df32acaa93833fad08 # v2
- with:
- mdbook-version: "0.4.37"
-
- - name: Cache dependencies
- uses: swatinem/rust-cache@9d47c6ad4b02e050fd481d890b2ea34778fd09d6 # v2
- with:
- save-if: ${{ github.ref == 'refs/heads/main' }}
- # cache-provider: "buildjet"
-
- - name: Install Linux dependencies
- shell: bash -euxo pipefail {0}
- run: ./script/linux
-
- - name: Download WASI SDK
- shell: bash -euxo pipefail {0}
- run: ./script/download-wasi-sdk
-
- - name: Generate action metadata
- shell: bash -euxo pipefail {0}
- run: ./script/generate-action-metadata
-
- - name: Check for broken links (in MD)
- uses: lycheeverse/lychee-action@82202e5e9c2f4ef1a55a3d02563e1cb6041e5332 # v2.4.1
- with:
- args: --no-progress --exclude '^http' './docs/src/**/*'
- fail: true
-
- - name: Build book
- shell: bash -euxo pipefail {0}
- run: |
- mkdir -p target/deploy
- mdbook build ./docs --dest-dir=../target/deploy/docs/
-
- - name: Check for broken links (in HTML)
- uses: lycheeverse/lychee-action@82202e5e9c2f4ef1a55a3d02563e1cb6041e5332 # v2.4.1
- with:
- args: --no-progress --exclude '^http' 'target/deploy/docs/'
- fail: true
diff --git a/.github/workflows/after_release.yml b/.github/workflows/after_release.yml
index 9ec15b78efb896..bc386ff6827945 100644
--- a/.github/workflows/after_release.yml
+++ b/.github/workflows/after_release.yml
@@ -1,6 +1,9 @@
# Generated from xtask::workflows::after_release
# Rebuild with `cargo xtask workflows`.
name: after_release
+env:
+ TAG_NAME: ${{ github.event.release.tag_name || inputs.tag_name }}
+ IS_PRERELEASE: ${{ github.event.release.prerelease || inputs.prerelease }}
on:
release:
types:
@@ -25,7 +28,7 @@ jobs:
runs-on: namespace-profile-2x4-ubuntu-2404
steps:
- name: after_release::rebuild_releases_page::refresh_cloud_releases
- run: curl -fX POST https://cloud.zed.dev/releases/refresh?expect_tag=${{ github.event.release.tag_name || inputs.tag_name }}
+ run: curl -fX POST "https://cloud.zed.dev/releases/refresh?expect_tag=$TAG_NAME"
- name: steps::checkout_repo
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
with:
@@ -34,6 +37,18 @@ jobs:
run: ./script/redeploy-vercel
env:
VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
+ deploy_docs:
+ if: (github.repository_owner == 'zed-industries' || github.repository_owner == 'zed-extensions')
+ permissions:
+ contents: read
+ uses: zed-industries/zed/.github/workflows/deploy_docs.yml@main
+ secrets:
+ DOCS_AMPLITUDE_API_KEY: ${{ secrets.DOCS_AMPLITUDE_API_KEY }}
+ CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
+ CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
+ with:
+ channel: ${{ (github.event.release.prerelease || inputs.prerelease) && 'preview' || 'stable' }}
+ checkout_ref: ${{ github.event.release.tag_name || inputs.tag_name }}
post_to_discord:
needs:
- rebuild_releases_page
@@ -43,7 +58,7 @@ jobs:
- id: get-release-url
name: after_release::post_to_discord::get_release_url
run: |
- if [ "${{ github.event.release.prerelease || inputs.prerelease }}" == "true" ]; then
+ if [ "$IS_PRERELEASE" == "true" ]; then
URL="https://zed.dev/releases/preview"
else
URL="https://zed.dev/releases/stable"
@@ -55,7 +70,7 @@ jobs:
uses: 2428392/gh-truncate-string-action@b3ff790d21cf42af3ca7579146eedb93c8fb0757
with:
stringToTruncate: |
- 📣 Zed [${{ github.event.release.tag_name || inputs.tag_name }}](<${{ steps.get-release-url.outputs.URL }}>) was just released!
+ 📣 Zed [${{ env.TAG_NAME }}](<${{ steps.get-release-url.outputs.URL }}>) was just released!
${{ github.event.release.body || inputs.body }}
maxLength: 2000
@@ -90,7 +105,7 @@ jobs:
- id: set-package-name
name: after_release::publish_winget::set_package_name
run: |
- if ("${{ github.event.release.prerelease || inputs.prerelease }}" -eq "true") {
+ if ($env:IS_PRERELEASE -eq "true") {
$PACKAGE_NAME = "ZedIndustries.Zed.Preview"
} else {
$PACKAGE_NAME = "ZedIndustries.Zed"
@@ -102,7 +117,7 @@ jobs:
uses: vedantmgoyal9/winget-releaser@19e706d4c9121098010096f9c495a70a7518b30f
with:
identifier: ${{ steps.set-package-name.outputs.PACKAGE_NAME }}
- release-tag: ${{ github.event.release.tag_name || inputs.tag_name }}
+ release-tag: ${{ env.TAG_NAME }}
max-versions-to-keep: 5
token: ${{ secrets.WINGET_TOKEN }}
create_sentry_release:
@@ -127,6 +142,7 @@ jobs:
- post_to_discord
- publish_winget
- create_sentry_release
+ - deploy_docs
if: failure()
runs-on: namespace-profile-2x4-ubuntu-2404
steps:
diff --git a/.github/workflows/assign_contributor_issue.yml b/.github/workflows/assign_contributor_issue.yml
new file mode 100644
index 00000000000000..5e968611299e26
--- /dev/null
+++ b/.github/workflows/assign_contributor_issue.yml
@@ -0,0 +1,70 @@
+# Assign Contributor Issue — auto-assign labeled contributor issues
+#
+# When an issue has both a `.contrib/good *` label and an `area:` label,
+# finds the least-busy contributor interested in that area (via Tally form
+# responses), assigns the issue, updates the project board, and notifies
+# the contributor on Slack.
+#
+# Errors and "no candidates" conditions are reported to the Slack activity
+# channel.
+
+name: Assign Contributor Issue
+
+on:
+ issues:
+ types: [labeled]
+ workflow_dispatch:
+ inputs:
+ issue_number:
+ description: "Issue number to test against"
+ required: true
+ type: number
+
+permissions:
+ contents: read
+
+concurrency:
+ group: assign-contributor-${{ github.event.issue.number || inputs.issue_number }}
+ cancel-in-progress: true
+
+jobs:
+ assign-contributor:
+ if: >-
+ github.event_name == 'workflow_dispatch' ||
+ (github.repository == 'zed-industries/zed' &&
+ github.event.issue.state == 'open' &&
+ (startsWith(github.event.label.name, '.contrib/good ') || startsWith(github.event.label.name, 'area:')))
+ runs-on: namespace-profile-2x4-ubuntu-2404
+ timeout-minutes: 5
+
+ steps:
+ - name: Generate app token
+ id: app-token
+ uses: actions/create-github-app-token@f8d387b68d61c58ab83c6c016672934102569859 # v3.0.0
+ with:
+ app-id: ${{ secrets.ZED_COMMUNITY_BOT_APP_ID }}
+ private-key: ${{ secrets.ZED_COMMUNITY_BOT_PRIVATE_KEY }}
+ owner: zed-industries
+
+ - name: Checkout repository
+ uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
+ with:
+ sparse-checkout: script/github-assign-contributor-issue.py
+ sparse-checkout-cone-mode: false
+
+ - name: Set up Python
+ uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
+ with:
+ python-version: "3.12"
+
+ - name: Install dependencies
+ run: pip install requests
+
+ - name: Assign contributor
+ env:
+ GITHUB_TOKEN: ${{ steps.app-token.outputs.token }}
+ TALLY_API_KEY: ${{ secrets.TALLY_API_KEY }}
+ TALLY_FORM_ID: ${{ vars.TALLY_CONTRIBUTOR_FORM_ID }}
+ SLACK_BOT_TOKEN: ${{ secrets.SLACK_CONTRIBUTOR_BOT_TOKEN }}
+ ISSUE_NUMBER: ${{ github.event.issue.number || inputs.issue_number }}
+ run: python script/github-assign-contributor-issue.py "$ISSUE_NUMBER"
diff --git a/.github/workflows/autofix_pr.yml b/.github/workflows/autofix_pr.yml
index 4c0b4ac378c81f..5e4fe70439bc34 100644
--- a/.github/workflows/autofix_pr.yml
+++ b/.github/workflows/autofix_pr.yml
@@ -16,6 +16,9 @@ on:
jobs:
run_autofix:
runs-on: namespace-profile-16x32-ubuntu-2204
+ env:
+ CC: clang
+ CXX: clang++
steps:
- name: steps::checkout_repo
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
@@ -50,13 +53,13 @@ jobs:
tool: cargo-machete@0.7.0
- name: autofix_pr::run_autofix::run_cargo_fix
if: ${{ inputs.run_clippy }}
- run: cargo fix --workspace --release --all-targets --all-features --allow-dirty --allow-staged
+ run: cargo fix --workspace --allow-dirty --allow-staged
- name: autofix_pr::run_autofix::run_cargo_machete_fix
if: ${{ inputs.run_clippy }}
run: cargo machete --fix
- name: autofix_pr::run_autofix::run_clippy_fix
if: ${{ inputs.run_clippy }}
- run: cargo clippy --workspace --release --all-targets --all-features --fix --allow-dirty --allow-staged
+ run: cargo clippy --workspace --fix --allow-dirty --allow-staged
- name: autofix_pr::run_autofix::run_prettier_fix
run: ./script/prettier --write
- name: autofix_pr::run_autofix::run_cargo_fmt
diff --git a/.github/workflows/bump_patch_version.yml b/.github/workflows/bump_patch_version.yml
index a12a1f5e43f52b..3618d7230f79b4 100644
--- a/.github/workflows/bump_patch_version.yml
+++ b/.github/workflows/bump_patch_version.yml
@@ -50,16 +50,6 @@ jobs:
echo "version=$version"
echo "tag_suffix=$tag_suffix"
} >> "$GITHUB_OUTPUT"
- - name: bump_patch_version::run_bump_patch_version::verify_prior_release_exists
- run: |
- status=$(curl -s -o /dev/null -w '%{http_code}' "https://cloud.zed.dev/releases/$CHANNEL/$VERSION/asset?asset=zed&os=macos&arch=aarch64")
- if [[ "$status" != "200" ]]; then
- echo "::error::version $VERSION has not been released on $CHANNEL yet (HTTP $status) — bump the patch version only after the current version is released"
- exit 1
- fi
- env:
- CHANNEL: ${{ steps.channel.outputs.channel }}
- VERSION: ${{ steps.channel.outputs.version }}
- name: steps::install_cargo_edit
uses: taiki-e/install-action@02cc5f8ca9f2301050c0c099055816a41ee05507
with:
diff --git a/.github/workflows/deploy_cloudflare.yml b/.github/workflows/deploy_cloudflare.yml
deleted file mode 100644
index 45d0c08f7dab8d..00000000000000
--- a/.github/workflows/deploy_cloudflare.yml
+++ /dev/null
@@ -1,61 +0,0 @@
-name: Deploy Docs
-
-on:
- push:
- branches:
- - main
-
-jobs:
- deploy-docs:
- name: Deploy Docs
- if: github.repository_owner == 'zed-industries'
- runs-on: namespace-profile-16x32-ubuntu-2204
-
- steps:
- - name: Checkout repo
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
- with:
- clean: false
-
- - name: Set up default .cargo/config.toml
- run: cp ./.cargo/collab-config.toml ./.cargo/config.toml
-
- - name: Build docs
- uses: ./.github/actions/build_docs
- env:
- DOCS_AMPLITUDE_API_KEY: ${{ secrets.DOCS_AMPLITUDE_API_KEY }}
-
- - name: Deploy Docs
- uses: cloudflare/wrangler-action@da0e0dfe58b7a431659754fdf3f186c529afbe65 # v3
- with:
- apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
- accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
- command: pages deploy target/deploy --project-name=docs
-
- - name: Deploy Install
- uses: cloudflare/wrangler-action@da0e0dfe58b7a431659754fdf3f186c529afbe65 # v3
- with:
- apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
- accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
- command: r2 object put -f script/install.sh zed-open-source-website-assets/install.sh
-
- - name: Deploy Docs Workers
- uses: cloudflare/wrangler-action@da0e0dfe58b7a431659754fdf3f186c529afbe65 # v3
- with:
- apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
- accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
- command: deploy .cloudflare/docs-proxy/src/worker.js
-
- - name: Deploy Install Workers
- uses: cloudflare/wrangler-action@da0e0dfe58b7a431659754fdf3f186c529afbe65 # v3
- with:
- apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
- accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
- command: deploy .cloudflare/docs-proxy/src/worker.js
-
- - name: Preserve Wrangler logs
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
- if: always()
- with:
- name: wrangler_logs
- path: /home/runner/.config/.wrangler/logs/
diff --git a/.github/workflows/deploy_docs.yml b/.github/workflows/deploy_docs.yml
new file mode 100644
index 00000000000000..1739b6b257a953
--- /dev/null
+++ b/.github/workflows/deploy_docs.yml
@@ -0,0 +1,153 @@
+# Generated from xtask::workflows::deploy_docs
+# Rebuild with `cargo xtask workflows`.
+name: deploy_docs
+on:
+ workflow_call:
+ inputs:
+ channel:
+ description: channel
+ type: string
+ default: ''
+ checkout_ref:
+ description: checkout_ref
+ type: string
+ default: ''
+ secrets:
+ DOCS_AMPLITUDE_API_KEY:
+ description: DOCS_AMPLITUDE_API_KEY
+ required: true
+ CLOUDFLARE_API_TOKEN:
+ description: CLOUDFLARE_API_TOKEN
+ required: true
+ CLOUDFLARE_ACCOUNT_ID:
+ description: CLOUDFLARE_ACCOUNT_ID
+ required: true
+ workflow_dispatch:
+ inputs:
+ channel:
+ description: 'Docs channel to deploy: nightly, preview, or stable'
+ type: string
+ default: ''
+ checkout_ref:
+ description: Git ref to checkout and deploy. Defaults to event SHA when omitted.
+ type: string
+ default: ''
+jobs:
+ deploy_docs:
+ if: github.repository_owner == 'zed-industries'
+ name: Build and Deploy Docs
+ runs-on: namespace-profile-16x32-ubuntu-2204
+ env:
+ DOCS_AMPLITUDE_API_KEY: ${{ secrets.DOCS_AMPLITUDE_API_KEY }}
+ CC: clang
+ CXX: clang++
+ steps:
+ - id: resolve-channel
+ name: deploy_docs::resolve_channel_step
+ run: |
+ if [ -z "$CHANNEL" ]; then
+ if [ "$GITHUB_REF" = "refs/heads/main" ]; then
+ CHANNEL="nightly"
+ else
+ echo "::error::channel input is required when ref is not main."
+ exit 1
+ fi
+ fi
+
+ case "$CHANNEL" in
+ "nightly")
+ SITE_URL="/docs/nightly/"
+ PROJECT_NAME="docs-nightly"
+ ;;
+ "preview")
+ SITE_URL="/docs/preview/"
+ PROJECT_NAME="docs-preview"
+ ;;
+ "stable")
+ SITE_URL="/docs/"
+ PROJECT_NAME="docs"
+ ;;
+ *)
+ echo "::error::Invalid docs channel '$CHANNEL'. Expected one of: nightly, preview, stable."
+ exit 1
+ ;;
+ esac
+
+ {
+ echo "channel=$CHANNEL"
+ echo "site_url=$SITE_URL"
+ echo "project_name=$PROJECT_NAME"
+ } >> "$GITHUB_OUTPUT"
+ env:
+ CHANNEL: ${{ inputs.channel }}
+ - name: steps::checkout_repo
+ uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
+ with:
+ clean: false
+ ref: ${{ inputs.checkout_ref != '' && inputs.checkout_ref || github.sha }}
+ - name: steps::setup_cargo_config
+ run: |
+ mkdir -p ./../.cargo
+ cp ./.cargo/ci-config.toml ./../.cargo/config.toml
+ - name: steps::cache_rust_dependencies_namespace
+ uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9
+ with:
+ cache: rust
+ path: ~/.rustup
+ - name: steps::setup_linux
+ run: ./script/linux
+ - name: steps::download_wasi_sdk
+ run: ./script/download-wasi-sdk
+ - name: ./script/generate-action-metadata
+ run: ./script/generate-action-metadata
+ - name: deploy_docs::lychee_link_check
+ uses: lycheeverse/lychee-action@82202e5e9c2f4ef1a55a3d02563e1cb6041e5332
+ with:
+ args: --no-progress --exclude '^http' './docs/src/**/*'
+ fail: true
+ jobSummary: false
+ - name: deploy_docs::install_mdbook
+ uses: peaceiris/actions-mdbook@ee69d230fe19748b7abf22df32acaa93833fad08
+ with:
+ mdbook-version: 0.4.37
+ - name: deploy_docs::build_docs_book
+ run: |
+ mkdir -p target/deploy
+ mdbook build ./docs --dest-dir=../target/deploy/docs/
+ env:
+ DOCS_CHANNEL: ${{ steps.resolve-channel.outputs.channel }}
+ MDBOOK_BOOK__SITE_URL: ${{ steps.resolve-channel.outputs.site_url }}
+ - name: deploy_docs::lychee_link_check
+ uses: lycheeverse/lychee-action@82202e5e9c2f4ef1a55a3d02563e1cb6041e5332
+ with:
+ args: --no-progress --exclude '^http' 'target/deploy/docs'
+ fail: true
+ jobSummary: false
+ - name: deploy_docs::docs_deploy_steps::deploy_to_cf_pages
+ uses: cloudflare/wrangler-action@da0e0dfe58b7a431659754fdf3f186c529afbe65
+ with:
+ apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
+ accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
+ command: pages deploy target/deploy --project-name=${{ steps.resolve-channel.outputs.project_name }} --branch main
+ - name: deploy_docs::docs_deploy_steps::upload_install_script
+ uses: cloudflare/wrangler-action@da0e0dfe58b7a431659754fdf3f186c529afbe65
+ with:
+ apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
+ accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
+ command: r2 object put -f script/install.sh zed-open-source-website-assets/install.sh
+ - name: deploy_docs::docs_deploy_steps::deploy_docs_worker
+ uses: cloudflare/wrangler-action@da0e0dfe58b7a431659754fdf3f186c529afbe65
+ with:
+ apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
+ accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
+ command: deploy .cloudflare/docs-proxy/src/worker.js
+ - name: deploy_docs::docs_deploy_steps::upload_wrangler_logs
+ if: always()
+ uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
+ with:
+ name: wrangler_logs
+ path: /home/runner/.config/.wrangler/logs/
+ timeout-minutes: 60
+defaults:
+ run:
+ shell: bash -euxo pipefail {0}
diff --git a/.github/workflows/deploy_nightly_docs.yml b/.github/workflows/deploy_nightly_docs.yml
new file mode 100644
index 00000000000000..340713e0a41d1a
--- /dev/null
+++ b/.github/workflows/deploy_nightly_docs.yml
@@ -0,0 +1,23 @@
+# Generated from xtask::workflows::deploy_nightly_docs
+# Rebuild with `cargo xtask workflows`.
+name: deploy_nightly_docs
+on:
+ push:
+ branches:
+ - main
+jobs:
+ deploy_docs:
+ if: (github.repository_owner == 'zed-industries' || github.repository_owner == 'zed-extensions')
+ permissions:
+ contents: read
+ uses: zed-industries/zed/.github/workflows/deploy_docs.yml@main
+ secrets:
+ DOCS_AMPLITUDE_API_KEY: ${{ secrets.DOCS_AMPLITUDE_API_KEY }}
+ CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
+ CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
+ with:
+ channel: nightly
+ checkout_ref: ${{ github.sha }}
+defaults:
+ run:
+ shell: bash -euxo pipefail {0}
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 90c13e820ca522..a2a779dc14fe11 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -274,6 +274,13 @@ jobs:
if: (github.repository_owner == 'zed-industries' || github.repository_owner == 'zed-extensions')
runs-on: namespace-profile-2x4-ubuntu-2404
steps:
+ - id: generate-token
+ name: steps::authenticate_as_zippy
+ uses: actions/create-github-app-token@f8d387b68d61c58ab83c6c016672934102569859
+ with:
+ app-id: ${{ secrets.ZED_ZIPPY_APP_ID }}
+ private-key: ${{ secrets.ZED_ZIPPY_APP_PRIVATE_KEY }}
+ permission-contents: write
- name: steps::checkout_repo
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
with:
@@ -289,7 +296,7 @@ jobs:
- name: release::create_draft_release::create_release
run: script/create-draft-release target/release-notes.md
env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ GITHUB_TOKEN: ${{ steps.generate-token.outputs.token }}
timeout-minutes: 60
compliance_check:
if: (github.repository_owner == 'zed-industries' || github.repository_owner == 'zed-extensions')
@@ -718,7 +725,7 @@ jobs:
needs:
- validate_release_assets
- release_compliance_check
- if: startsWith(github.ref, 'refs/tags/v') && endsWith(github.ref, '-pre') && !endsWith(github.ref, '.0-pre')
+ if: startsWith(github.ref, 'refs/tags/v') && endsWith(github.ref, '-pre')
runs-on: namespace-profile-2x4-ubuntu-2404
steps:
- id: generate-token
@@ -727,10 +734,51 @@ jobs:
with:
app-id: ${{ secrets.ZED_ZIPPY_APP_ID }}
private-key: ${{ secrets.ZED_ZIPPY_APP_PRIVATE_KEY }}
- - name: gh release edit "$GITHUB_REF_NAME" --repo=zed-industries/zed --draft=false
- run: gh release edit "$GITHUB_REF_NAME" --repo=zed-industries/zed --draft=false
+ - name: steps::checkout_repo
+ uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
+ with:
+ clean: false
+ ref: ${{ github.ref }}
+ token: ${{ steps.generate-token.outputs.token }}
+ - id: auto-release-preview
+ name: release::auto_release_preview::auto_release_preview
+ run: |
+ tag="$GITHUB_REF_NAME"
+ release_published=false
+
+ if [[ ! "$tag" =~ ^v([0-9]+)\.([0-9]+)\.([0-9]+)-pre$ ]]; then
+ echo "::error::expected preview release tag in the form vMAJOR.MINOR.PATCH-pre, got $tag"
+ exit 1
+ fi
+
+ major="${BASH_REMATCH[1]}"
+ minor="${BASH_REMATCH[2]}"
+ should_release=true
+
+ released_preview="$(script/get-released-version preview)"
+ if [[ -z "$released_preview" || "$released_preview" == "null" ]]; then
+ echo "::error::could not determine released preview version"
+ exit 1
+ fi
+
+ released_preview_major="$(echo "$released_preview" | cut -d. -f1)"
+ released_preview_minor="$(echo "$released_preview" | cut -d. -f2)"
+
+ if [[ "$released_preview_major" != "$major" || "$released_preview_minor" != "$minor" ]]; then
+ should_release=false
+ echo "Leaving $tag as a draft because it is the first preview release for v${major}.${minor}.x"
+ fi
+
+ if [[ "$should_release" == "true" ]]; then
+ gh release edit "$tag" --repo=zed-industries/zed --draft=false
+ release_published=true
+ fi
+
+ echo "release_published=$release_published" >> "$GITHUB_OUTPUT"
env:
GITHUB_TOKEN: ${{ steps.generate-token.outputs.token }}
+ outputs:
+ release_published: ${{ steps.auto-release-preview.outputs.release_published }}
push_release_update_notification:
needs:
- create_draft_release
@@ -797,10 +845,10 @@ jobs:
echo ""
elif [ "$VALIDATE_RESULT" == "failure" ]; then
echo "❌ Release validation failed for $TAG: missing assets: $RUN_URL"
- elif [ "$AUTO_RELEASE_RESULT" == "success" ]; then
- echo "✅ Release $TAG was auto-released successfully: $RELEASE_URL"
elif [ "$AUTO_RELEASE_RESULT" == "failure" ]; then
echo "❌ Auto release failed for $TAG: $RUN_URL"
+ elif [ "$AUTO_RELEASE_RESULT" == "success" ] && [ "$AUTO_RELEASE_PUBLISHED" == "true" ]; then
+ echo "✅ Release $TAG was auto-released successfully: $RELEASE_URL"
else
echo "👀 Release $TAG sitting freshly baked in the oven and waiting to be published: $RELEASE_URL"
fi
@@ -814,6 +862,7 @@ jobs:
VALIDATE_RESULT: ${{ needs.validate_release_assets.result }}
COMPLIANCE_RESULT: ${{ needs.release_compliance_check.result }}
AUTO_RELEASE_RESULT: ${{ needs.auto_release_preview.result }}
+ AUTO_RELEASE_PUBLISHED: ${{ needs.auto_release_preview.outputs.release_published }}
RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
TAG: ${{ github.ref_name }}
RESULT_RUN_TESTS_MAC: ${{ needs.run_tests_mac.result }}
diff --git a/.github/workflows/retag_release.yml b/.github/workflows/retag_release.yml
deleted file mode 100644
index 0cd3710ba358ad..00000000000000
--- a/.github/workflows/retag_release.yml
+++ /dev/null
@@ -1,88 +0,0 @@
-# Generated from xtask::workflows::retag_release
-# Rebuild with `cargo xtask workflows`.
-name: retag_release
-on:
- workflow_dispatch:
- inputs:
- branch:
- description: Release branch to re-tag (e.g. v0.180.x)
- required: true
- type: string
-jobs:
- run_retag_release:
- if: (github.repository_owner == 'zed-industries' || github.repository_owner == 'zed-extensions')
- runs-on: namespace-profile-16x32-ubuntu-2204
- steps:
- - id: generate-token
- name: steps::authenticate_as_zippy
- uses: actions/create-github-app-token@f8d387b68d61c58ab83c6c016672934102569859
- with:
- app-id: ${{ secrets.ZED_ZIPPY_APP_ID }}
- private-key: ${{ secrets.ZED_ZIPPY_APP_PRIVATE_KEY }}
- - name: steps::checkout_repo
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
- with:
- clean: false
- ref: ${{ inputs.branch }}
- token: ${{ steps.generate-token.outputs.token }}
- - id: info
- name: retag_release::run_retag_release::resolve_tag
- run: |
- if [[ ! "$BRANCH" =~ ^v[0-9]+\.[0-9]{1,3}\.x$ ]]; then
- echo "::error::branch '$BRANCH' does not match the release branch pattern v[N].[N].x"
- exit 1
- fi
-
- channel="$(cat crates/zed/RELEASE_CHANNEL)"
-
- tag_suffix=""
- case $channel in
- stable)
- ;;
- preview)
- tag_suffix="-pre"
- ;;
- *)
- echo "::error::must be run on a stable or preview release branch"
- exit 1
- ;;
- esac
-
- version=$(script/get-crate-version zed)
-
- {
- echo "channel=$channel"
- echo "version=$version"
- echo "tag_suffix=$tag_suffix"
- echo "head_sha=$(git rev-parse HEAD)"
- } >> "$GITHUB_OUTPUT"
- env:
- BRANCH: ${{ inputs.branch }}
- - name: retag_release::run_retag_release::verify_no_existing_release
- run: |
- status=$(curl -s -o /dev/null -w '%{http_code}' "https://cloud.zed.dev/releases/$CHANNEL/$VERSION/asset?asset=zed&os=macos&arch=aarch64")
- if [[ "$status" == "200" ]]; then
- echo "::error::version $VERSION is already released on $CHANNEL — cannot re-tag a released version"
- exit 1
- fi
- env:
- CHANNEL: ${{ steps.info.outputs.channel }}
- VERSION: ${{ steps.info.outputs.version }}
- - name: steps::update_tag
- uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b
- with:
- script: |
- github.rest.git.updateRef({
- owner: context.repo.owner,
- repo: context.repo.repo,
- ref: 'tags/v${{ steps.info.outputs.version }}${{ steps.info.outputs.tag_suffix }}',
- sha: '${{ steps.info.outputs.head_sha }}',
- force: true
- })
- github-token: ${{ steps.generate-token.outputs.token }}
-concurrency:
- group: ${{ github.workflow }}-${{ inputs.branch }}
- cancel-in-progress: true
-defaults:
- run:
- shell: bash -euxo pipefail {0}
diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml
index 2051fa567b53af..4ce9b3cc1d6d5a 100644
--- a/.github/workflows/run_tests.yml
+++ b/.github/workflows/run_tests.yml
@@ -637,8 +637,9 @@ jobs:
needs:
- orchestrate
if: needs.orchestrate.outputs.run_docs == 'true' && github.event_name != 'merge_group'
- runs-on: namespace-profile-8x16-ubuntu-2204
+ runs-on: namespace-profile-16x32-ubuntu-2204
env:
+ DOCS_AMPLITUDE_API_KEY: ${{ secrets.DOCS_AMPLITUDE_API_KEY }}
CC: clang
CXX: clang++
steps:
@@ -655,27 +656,30 @@ jobs:
with:
cache: rust
path: ~/.rustup
- - name: run_tests::check_docs::lychee_link_check
- uses: lycheeverse/lychee-action@82202e5e9c2f4ef1a55a3d02563e1cb6041e5332
- with:
- args: --no-progress --exclude '^http' './docs/src/**/*'
- fail: true
- jobSummary: false
- name: steps::setup_linux
run: ./script/linux
- name: steps::download_wasi_sdk
run: ./script/download-wasi-sdk
- name: ./script/generate-action-metadata
run: ./script/generate-action-metadata
- - name: run_tests::check_docs::install_mdbook
+ - name: deploy_docs::lychee_link_check
+ uses: lycheeverse/lychee-action@82202e5e9c2f4ef1a55a3d02563e1cb6041e5332
+ with:
+ args: --no-progress --exclude '^http' './docs/src/**/*'
+ fail: true
+ jobSummary: false
+ - name: deploy_docs::install_mdbook
uses: peaceiris/actions-mdbook@ee69d230fe19748b7abf22df32acaa93833fad08
with:
mdbook-version: 0.4.37
- - name: run_tests::check_docs::build_docs
+ - name: deploy_docs::build_docs_book
run: |
mkdir -p target/deploy
mdbook build ./docs --dest-dir=../target/deploy/docs/
- - name: run_tests::check_docs::lychee_link_check
+ env:
+ DOCS_CHANNEL: stable
+ MDBOOK_BOOK__SITE_URL: /docs/
+ - name: deploy_docs::lychee_link_check
uses: lycheeverse/lychee-action@82202e5e9c2f4ef1a55a3d02563e1cb6041e5332
with:
args: --no-progress --exclude '^http' 'target/deploy/docs'
diff --git a/.gitignore b/.gitignore
index ec743a4cdebc7b..2c41cfb98986e6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,7 @@
**/*.proptest-regressions
**/cargo-target
**/target
+.webrtc-sys/
**/venv
**/.direnv
*.wasm
diff --git a/.zed/settings.json b/.zed/settings.json
index 2ecbd5623d26bd..521cf786abe135 100644
--- a/.zed/settings.json
+++ b/.zed/settings.json
@@ -57,7 +57,6 @@
"remove_trailing_whitespace_on_save": true,
"ensure_final_newline_on_save": true,
"file_scan_exclusions": [
- "crates/agent/src/edit_agent/evals/fixtures",
"crates/agent/src/tools/evals/fixtures",
"**/.git",
"**/.svn",
diff --git a/Cargo.lock b/Cargo.lock
index 72456e8e706790..6ee81109be5b6f 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -31,7 +31,7 @@ dependencies = [
"portable-pty",
"project",
"prompt_store",
- "rand 0.9.3",
+ "rand 0.9.4",
"serde",
"serde_json",
"settings",
@@ -85,7 +85,7 @@ dependencies = [
"log",
"pretty_assertions",
"project",
- "rand 0.9.3",
+ "rand 0.9.4",
"serde_json",
"settings",
"telemetry",
@@ -163,7 +163,6 @@ dependencies = [
"context_server",
"ctor",
"db",
- "derive_more",
"editor",
"env_logger 0.11.8",
"eval_utils",
@@ -190,7 +189,7 @@ dependencies = [
"pretty_assertions",
"project",
"prompt_store",
- "rand 0.9.3",
+ "rand 0.9.4",
"regex",
"reqwest_client",
"rust-embed",
@@ -368,7 +367,6 @@ dependencies = [
"eval_utils",
"extension",
"extension_host",
- "external_websocket_sync",
"feature_flags",
"file_icons",
"fs",
@@ -406,7 +404,7 @@ dependencies = [
"project",
"prompt_store",
"proto",
- "rand 0.9.3",
+ "rand 0.9.4",
"release_channel",
"remote",
"remote_connection",
@@ -431,8 +429,6 @@ dependencies = [
"theme",
"theme_settings",
"time",
- "time_format",
- "tokio",
"tree-sitter-md",
"ui",
"ui_input",
@@ -1149,7 +1145,7 @@ dependencies = [
"pin-project-lite",
"rustls-pki-types",
"tokio",
- "tokio-rustls 0.26.2",
+ "tokio-rustls 0.26.4",
"tungstenite 0.27.0",
]
@@ -1271,7 +1267,7 @@ dependencies = [
"simplelog",
"tempfile",
"windows 0.61.3",
- "winresource",
+ "windows_resources",
]
[[package]]
@@ -1353,9 +1349,9 @@ dependencies = [
[[package]]
name = "aws-config"
-version = "1.8.10"
+version = "1.8.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1856b1b48b65f71a4dd940b1c0931f9a7b646d4a924b9828ffefc1454714668a"
+checksum = "8a8fc176d53d6fe85017f230405e3255cedb4a02221cb55ed6d76dccbbb099b2"
dependencies = [
"aws-credential-types",
"aws-runtime",
@@ -1383,9 +1379,9 @@ dependencies = [
[[package]]
name = "aws-credential-types"
-version = "1.2.10"
+version = "1.2.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b01c9521fa01558f750d183c8c68c81b0155b9d193a4ba7f84c36bd1b6d04a06"
+checksum = "e26bbf46abc608f2dc61fd6cb3b7b0665497cc259a21520151ed98f8b37d2c79"
dependencies = [
"aws-smithy-async",
"aws-smithy-runtime-api",
@@ -1395,9 +1391,9 @@ dependencies = [
[[package]]
name = "aws-lc-rs"
-version = "1.15.4"
+version = "1.16.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b7b6141e96a8c160799cc2d5adecd5cbbe5054cb8c7c4af53da0f83bb7ad256"
+checksum = "0ec6fb3fe69024a75fa7e1bfb48aa6cf59706a101658ea01bfd33b2b248a038f"
dependencies = [
"aws-lc-sys",
"untrusted 0.7.1",
@@ -1406,9 +1402,9 @@ dependencies = [
[[package]]
name = "aws-lc-sys"
-version = "0.37.0"
+version = "0.40.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c34dda4df7017c8db52132f0f8a2e0f8161649d15723ed63fc00c82d0f2081a"
+checksum = "f50037ee5e1e41e7b8f9d161680a725bd1626cb6f8c7e901f91f942850852fe7"
dependencies = [
"cc",
"cmake",
@@ -1418,9 +1414,9 @@ dependencies = [
[[package]]
name = "aws-runtime"
-version = "1.5.16"
+version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ce527fb7e53ba9626fc47824f25e256250556c40d8f81d27dd92aa38239d632"
+checksum = "b0f92058d22a46adf53ec57a6a96f34447daf02bff52e8fb956c66bcd5c6ac12"
dependencies = [
"aws-credential-types",
"aws-sigv4",
@@ -1432,9 +1428,12 @@ dependencies = [
"aws-smithy-types",
"aws-types",
"bytes 1.11.1",
+ "bytes-utils",
"fastrand 2.3.0",
"http 0.2.12",
+ "http 1.3.1",
"http-body 0.4.6",
+ "http-body 1.0.1",
"percent-encoding",
"pin-project-lite",
"tracing",
@@ -1443,9 +1442,9 @@ dependencies = [
[[package]]
name = "aws-sdk-bedrockruntime"
-version = "1.113.0"
+version = "1.125.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d5d2b8f081b9e8ff455b8dd7387b6b02263c3dac73172d188d2b523ff1e775e9"
+checksum = "731e9a808701bdc7c6e27dfbc284f5b40c30ac0392a2e58e3bc855b243a7c967"
dependencies = [
"aws-credential-types",
"aws-runtime",
@@ -1454,6 +1453,7 @@ dependencies = [
"aws-smithy-eventstream",
"aws-smithy-http",
"aws-smithy-json",
+ "aws-smithy-observability",
"aws-smithy-runtime",
"aws-smithy-runtime-api",
"aws-smithy-types",
@@ -1461,16 +1461,17 @@ dependencies = [
"bytes 1.11.1",
"fastrand 2.3.0",
"http 0.2.12",
- "hyper 0.14.32",
+ "http 1.3.1",
+ "http-body-util",
"regex-lite",
"tracing",
]
[[package]]
name = "aws-sdk-kinesis"
-version = "1.95.0"
+version = "1.100.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c3b2ce941308de56f5c2f69490497610e1a815ce968c9ac0796ab165f25205d"
+checksum = "5769458ed398a643d6f0a6307077311fe253655d9f3ecc3e53069dc61cbcc98c"
dependencies = [
"aws-credential-types",
"aws-runtime",
@@ -1478,6 +1479,7 @@ dependencies = [
"aws-smithy-eventstream",
"aws-smithy-http",
"aws-smithy-json",
+ "aws-smithy-observability",
"aws-smithy-runtime",
"aws-smithy-runtime-api",
"aws-smithy-types",
@@ -1485,15 +1487,16 @@ dependencies = [
"bytes 1.11.1",
"fastrand 2.3.0",
"http 0.2.12",
+ "http 1.3.1",
"regex-lite",
"tracing",
]
[[package]]
name = "aws-sdk-s3"
-version = "1.112.0"
+version = "1.123.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eee73a27721035c46da0572b390a69fbdb333d0177c24f3d8f7ff952eeb96690"
+checksum = "c018f22146966fdd493a664f62ee2483dff256b42a08c125ab6a084bde7b77fe"
dependencies = [
"aws-credential-types",
"aws-runtime",
@@ -1503,6 +1506,7 @@ dependencies = [
"aws-smithy-eventstream",
"aws-smithy-http",
"aws-smithy-json",
+ "aws-smithy-observability",
"aws-smithy-runtime",
"aws-smithy-runtime-api",
"aws-smithy-types",
@@ -1514,7 +1518,7 @@ dependencies = [
"hmac",
"http 0.2.12",
"http 1.3.1",
- "http-body 0.4.6",
+ "http-body 1.0.1",
"lru",
"percent-encoding",
"regex-lite",
@@ -1525,15 +1529,16 @@ dependencies = [
[[package]]
name = "aws-sdk-sso"
-version = "1.88.0"
+version = "1.94.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d05b276777560aa9a196dbba2e3aada4d8006d3d7eeb3ba7fe0c317227d933c4"
+checksum = "699da1961a289b23842d88fe2984c6ff68735fdf9bdcbc69ceaeb2491c9bf434"
dependencies = [
"aws-credential-types",
"aws-runtime",
"aws-smithy-async",
"aws-smithy-http",
"aws-smithy-json",
+ "aws-smithy-observability",
"aws-smithy-runtime",
"aws-smithy-runtime-api",
"aws-smithy-types",
@@ -1541,21 +1546,23 @@ dependencies = [
"bytes 1.11.1",
"fastrand 2.3.0",
"http 0.2.12",
+ "http 1.3.1",
"regex-lite",
"tracing",
]
[[package]]
name = "aws-sdk-ssooidc"
-version = "1.90.0"
+version = "1.96.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f9be14d6d9cd761fac3fd234a0f47f7ed6c0df62d83c0eeb7012750e4732879b"
+checksum = "e3e3a4cb3b124833eafea9afd1a6cc5f8ddf3efefffc6651ef76a03cbc6b4981"
dependencies = [
"aws-credential-types",
"aws-runtime",
"aws-smithy-async",
"aws-smithy-http",
"aws-smithy-json",
+ "aws-smithy-observability",
"aws-smithy-runtime",
"aws-smithy-runtime-api",
"aws-smithy-types",
@@ -1563,21 +1570,23 @@ dependencies = [
"bytes 1.11.1",
"fastrand 2.3.0",
"http 0.2.12",
+ "http 1.3.1",
"regex-lite",
"tracing",
]
[[package]]
name = "aws-sdk-sts"
-version = "1.90.0"
+version = "1.98.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "98a862d704c817d865c8740b62d8bbeb5adcb30965e93b471df8a5bcefa20a80"
+checksum = "89c4f19655ab0856375e169865c91264de965bd74c407c7f1e403184b1049409"
dependencies = [
"aws-credential-types",
"aws-runtime",
"aws-smithy-async",
"aws-smithy-http",
"aws-smithy-json",
+ "aws-smithy-observability",
"aws-smithy-query",
"aws-smithy-runtime",
"aws-smithy-runtime-api",
@@ -1586,15 +1595,16 @@ dependencies = [
"aws-types",
"fastrand 2.3.0",
"http 0.2.12",
+ "http 1.3.1",
"regex-lite",
"tracing",
]
[[package]]
name = "aws-sigv4"
-version = "1.3.6"
+version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c35452ec3f001e1f2f6db107b6373f1f48f05ec63ba2c5c9fa91f07dad32af11"
+checksum = "68f6ae9b71597dc5fd115d52849d7a5556ad9265885ad3492ea8d73b93bbc46e"
dependencies = [
"aws-credential-types",
"aws-smithy-eventstream",
@@ -1620,9 +1630,9 @@ dependencies = [
[[package]]
name = "aws-smithy-async"
-version = "1.2.6"
+version = "1.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "127fcfad33b7dfc531141fda7e1c402ac65f88aca5511a4d31e2e3d2cd01ce9c"
+checksum = "2ffcaf626bdda484571968400c326a244598634dc75fd451325a54ad1a59acfc"
dependencies = [
"futures-util",
"pin-project-lite",
@@ -1631,17 +1641,18 @@ dependencies = [
[[package]]
name = "aws-smithy-checksums"
-version = "0.63.11"
+version = "0.64.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "95bd108f7b3563598e4dc7b62e1388c9982324a2abd622442167012690184591"
+checksum = "a764fa7222922f6c0af8eea478b0ef1ba5ce1222af97e01f33ca5e957bd7f3b9"
dependencies = [
"aws-smithy-http",
"aws-smithy-types",
"bytes 1.11.1",
"crc-fast",
"hex",
- "http 0.2.12",
- "http-body 0.4.6",
+ "http 1.3.1",
+ "http-body 1.0.1",
+ "http-body-util",
"md-5",
"pin-project-lite",
"sha1",
@@ -1651,9 +1662,9 @@ dependencies = [
[[package]]
name = "aws-smithy-eventstream"
-version = "0.60.13"
+version = "0.60.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e29a304f8319781a39808847efb39561351b1bb76e933da7aa90232673638658"
+checksum = "faf09d74e5e32f76b8762da505a3cd59303e367a664ca67295387baa8c1d7548"
dependencies = [
"aws-smithy-types",
"bytes 1.11.1",
@@ -1662,9 +1673,9 @@ dependencies = [
[[package]]
name = "aws-smithy-http"
-version = "0.62.5"
+version = "0.63.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "445d5d720c99eed0b4aa674ed00d835d9b1427dd73e04adaf2f94c6b2d6f9fca"
+checksum = "af4a8a5fe3e4ac7ee871237c340bbce13e982d37543b65700f4419e039f5d78e"
dependencies = [
"aws-smithy-eventstream",
"aws-smithy-runtime-api",
@@ -1673,9 +1684,9 @@ dependencies = [
"bytes-utils",
"futures-core",
"futures-util",
- "http 0.2.12",
"http 1.3.1",
- "http-body 0.4.6",
+ "http-body 1.0.1",
+ "http-body-util",
"percent-encoding",
"pin-project-lite",
"pin-utils",
@@ -1684,9 +1695,9 @@ dependencies = [
[[package]]
name = "aws-smithy-http-client"
-version = "1.1.4"
+version = "1.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "623254723e8dfd535f566ee7b2381645f8981da086b5c4aa26c0c41582bb1d2c"
+checksum = "0709f0083aa19b704132684bc26d3c868e06bd428ccc4373b0b55c3e8748a58b"
dependencies = [
"aws-smithy-async",
"aws-smithy-runtime-api",
@@ -1699,42 +1710,42 @@ dependencies = [
"hyper 0.14.32",
"hyper 1.7.0",
"hyper-rustls 0.24.2",
- "hyper-rustls 0.27.7",
+ "hyper-rustls 0.27.9",
"hyper-util",
"pin-project-lite",
"rustls 0.21.12",
- "rustls 0.23.33",
- "rustls-native-certs 0.8.2",
+ "rustls 0.23.40",
+ "rustls-native-certs 0.8.3",
"rustls-pki-types",
"tokio",
- "tokio-rustls 0.26.2",
+ "tokio-rustls 0.26.4",
"tower 0.5.2",
"tracing",
]
[[package]]
name = "aws-smithy-json"
-version = "0.61.7"
+version = "0.62.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2db31f727935fc63c6eeae8b37b438847639ec330a9161ece694efba257e0c54"
+checksum = "9648b0bb82a2eedd844052c6ad2a1a822d1f8e3adee5fbf668366717e428856a"
dependencies = [
"aws-smithy-types",
]
[[package]]
name = "aws-smithy-observability"
-version = "0.1.4"
+version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2d1881b1ea6d313f9890710d65c158bdab6fb08c91ea825f74c1c8c357baf4cc"
+checksum = "4d3f39d5bb871aaf461d59144557f16d5927a5248a983a40654d9cf3b9ba183b"
dependencies = [
"aws-smithy-runtime-api",
]
[[package]]
name = "aws-smithy-query"
-version = "0.60.8"
+version = "0.60.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d28a63441360c477465f80c7abac3b9c4d075ca638f982e605b7dc2a2c7156c9"
+checksum = "1a56d79744fb3edb5d722ef79d86081e121d3b9422cb209eb03aea6aa4f21ebd"
dependencies = [
"aws-smithy-types",
"urlencoding",
@@ -1742,9 +1753,9 @@ dependencies = [
[[package]]
name = "aws-smithy-runtime"
-version = "1.9.4"
+version = "1.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0bbe9d018d646b96c7be063dd07987849862b0e6d07c778aad7d93d1be6c1ef0"
+checksum = "8fd3dfc18c1ce097cf81fced7192731e63809829c6cbf933c1ec47452d08e1aa"
dependencies = [
"aws-smithy-async",
"aws-smithy-http",
@@ -1758,6 +1769,7 @@ dependencies = [
"http 1.3.1",
"http-body 0.4.6",
"http-body 1.0.1",
+ "http-body-util",
"pin-project-lite",
"pin-utils",
"tokio",
@@ -1766,9 +1778,9 @@ dependencies = [
[[package]]
name = "aws-smithy-runtime-api"
-version = "1.9.2"
+version = "1.11.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec7204f9fd94749a7c53b26da1b961b4ac36bf070ef1e0b94bb09f79d4f6c193"
+checksum = "8c55e0837e9b8526f49e0b9bfa9ee18ddee70e853f5bc09c5d11ebceddcb0fec"
dependencies = [
"aws-smithy-async",
"aws-smithy-types",
@@ -1783,9 +1795,9 @@ dependencies = [
[[package]]
name = "aws-smithy-types"
-version = "1.3.4"
+version = "1.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "25f535879a207fce0db74b679cfc3e91a3159c8144d717d55f5832aea9eef46e"
+checksum = "9d73dbfbaa8e4bc57b9045137680b958d274823509a360abfd8e1d514d40c95c"
dependencies = [
"base64-simd",
"bytes 1.11.1",
@@ -1809,18 +1821,18 @@ dependencies = [
[[package]]
name = "aws-smithy-xml"
-version = "0.60.12"
+version = "0.60.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eab77cdd036b11056d2a30a7af7b775789fb024bf216acc13884c6c97752ae56"
+checksum = "0ce02add1aa3677d022f8adf81dcbe3046a95f17a1b1e8979c145cd21d3d22b3"
dependencies = [
"xmlparser",
]
[[package]]
name = "aws-types"
-version = "1.3.10"
+version = "1.3.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d79fb68e3d7fe5d4833ea34dc87d2e97d26d3086cb3da660bb6b1f76d98680b6"
+checksum = "6c50f3cdf47caa8d01f2be4a6663ea02418e892f9bbfd82c7b9a3a37eaccdd3a"
dependencies = [
"aws-credential-types",
"aws-smithy-async",
@@ -1846,7 +1858,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf"
dependencies = [
"async-trait",
- "axum-core 0.3.4",
+ "axum-core",
"base64 0.21.7",
"bitflags 1.3.2",
"bytes 1.11.1",
@@ -1875,43 +1887,6 @@ dependencies = [
"tower-service",
]
-[[package]]
-name = "axum"
-version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f"
-dependencies = [
- "async-trait",
- "axum-core 0.4.5",
- "base64 0.22.1",
- "bytes 1.11.1",
- "futures-util",
- "http 1.3.1",
- "http-body 1.0.1",
- "http-body-util",
- "hyper 1.7.0",
- "hyper-util",
- "itoa",
- "matchit",
- "memchr",
- "mime",
- "percent-encoding",
- "pin-project-lite",
- "rustversion",
- "serde",
- "serde_json",
- "serde_path_to_error",
- "serde_urlencoded",
- "sha1",
- "sync_wrapper 1.0.2",
- "tokio",
- "tokio-tungstenite 0.24.0",
- "tower 0.5.2",
- "tower-layer",
- "tower-service",
- "tracing",
-]
-
[[package]]
name = "axum-core"
version = "0.3.4"
@@ -1929,27 +1904,6 @@ dependencies = [
"tower-service",
]
-[[package]]
-name = "axum-core"
-version = "0.4.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199"
-dependencies = [
- "async-trait",
- "bytes 1.11.1",
- "futures-util",
- "http 1.3.1",
- "http-body 1.0.1",
- "http-body-util",
- "mime",
- "pin-project-lite",
- "rustversion",
- "sync_wrapper 1.0.2",
- "tower-layer",
- "tower-service",
- "tracing",
-]
-
[[package]]
name = "backtrace"
version = "0.3.76"
@@ -2304,7 +2258,7 @@ dependencies = [
"language",
"log",
"pretty_assertions",
- "rand 0.9.3",
+ "rand 0.9.4",
"rope",
"settings",
"sum_tree",
@@ -2555,7 +2509,7 @@ dependencies = [
"memmap2",
"num-traits",
"num_cpus",
- "rand 0.9.3",
+ "rand 0.9.4",
"rand_distr",
"rayon",
"safetensors",
@@ -2639,7 +2593,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0acb89ccf798a28683f00089d0630dfaceec087234eae0d308c05ddeaa941b40"
dependencies = [
"ambient-authority",
- "rand 0.8.5",
+ "rand 0.8.6",
]
[[package]]
@@ -3007,6 +2961,7 @@ dependencies = [
"util",
"walkdir",
"windows 0.61.3",
+ "windows_resources",
]
[[package]]
@@ -3039,7 +2994,7 @@ dependencies = [
"parking_lot",
"paths",
"postage",
- "rand 0.9.3",
+ "rand 0.9.4",
"regex",
"release_channel",
"rpc",
@@ -3059,7 +3014,7 @@ dependencies = [
"tiny_http",
"tokio",
"tokio-native-tls",
- "tokio-rustls 0.26.2",
+ "tokio-rustls 0.26.4",
"tokio-socks",
"url",
"util",
@@ -3242,7 +3197,7 @@ dependencies = [
"aws-config",
"aws-sdk-kinesis",
"aws-sdk-s3",
- "axum 0.6.20",
+ "axum",
"buffer_diff",
"call",
"channel",
@@ -3290,7 +3245,7 @@ dependencies = [
"prometheus",
"prompt_store",
"prost 0.9.0",
- "rand 0.9.3",
+ "rand 0.9.4",
"recent_projects",
"release_channel",
"remote",
@@ -3340,6 +3295,7 @@ dependencies = [
"collections",
"db",
"editor",
+ "feature_flags",
"futures 0.3.32",
"fuzzy",
"gpui",
@@ -3628,7 +3584,7 @@ dependencies = [
"parking_lot",
"pollster 0.4.0",
"postage",
- "rand 0.9.3",
+ "rand 0.9.4",
"schemars 1.0.4",
"serde",
"serde_json",
@@ -4004,36 +3960,36 @@ dependencies = [
[[package]]
name = "cranelift-assembler-x64"
-version = "0.123.7"
+version = "0.123.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c8056d63fef9a6f88a1e7aae52bb08fcf48de8866d514c0dc52feb15975f5db5"
+checksum = "cb1ffe339f197d6645b4d3037edf67c13cd3aa8871f29c2c9c046c729c1b9a17"
dependencies = [
"cranelift-assembler-x64-meta",
]
[[package]]
name = "cranelift-assembler-x64-meta"
-version = "0.123.7"
+version = "0.123.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57d063b40884a0d733223a45c5de1155395af4393cf7f900d5be8e2cbc094015"
+checksum = "1e81a21df73d1b12ed19eba481c08de8891e179e1870ed28d6e397f7746108f5"
dependencies = [
"cranelift-srcgen",
]
[[package]]
name = "cranelift-bforest"
-version = "0.123.7"
+version = "0.123.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c3add2881bae2d55cd7162906988dd70053cb7ece865ad793a6754b04d47df6"
+checksum = "3cf917d0180c15c945c13c8dde615d32a015769513b29158f728311d85a8f80d"
dependencies = [
"cranelift-entity",
]
[[package]]
name = "cranelift-bitset"
-version = "0.123.7"
+version = "0.123.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd73e32bc1ea4bddc4c770760c66fa24b2890991b0561af554219e603fcd7c34"
+checksum = "a6f4e1af2df00798c2895d228bb53d65c5aa09acace8525096f0b53830ffe42c"
dependencies = [
"serde",
"serde_derive",
@@ -4041,9 +3997,9 @@ dependencies = [
[[package]]
name = "cranelift-codegen"
-version = "0.123.7"
+version = "0.123.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3e1da85f2636fe28244848861d1ed0f8dccdc6e98fc5db31aa5eb8878e7ff617"
+checksum = "4e3a5d7300e4b44933dcf2947399945abe3f30f92c789b496ad72949e3ee15a6"
dependencies = [
"bumpalo",
"cranelift-assembler-x64",
@@ -4071,9 +4027,9 @@ dependencies = [
[[package]]
name = "cranelift-codegen-meta"
-version = "0.123.7"
+version = "0.123.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ee3c8aba9d89832df27364b2e79dc2fe288daf4bd6c7347829e7f3f258ea5650"
+checksum = "becdb5c3111800d7f8e666fe5f35693bfc77de4401bfcaea19815caf7c482fb9"
dependencies = [
"cranelift-assembler-x64-meta",
"cranelift-codegen-shared",
@@ -4084,24 +4040,24 @@ dependencies = [
[[package]]
name = "cranelift-codegen-shared"
-version = "0.123.7"
+version = "0.123.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac9a9b09fe107fef6377caed20614586124184cffccb73611312ceb922a917e6"
+checksum = "d8fa77efffa12934971f757e154b16dd5e369a7f388a0f3adff74aadfd4c5a1d"
[[package]]
name = "cranelift-control"
-version = "0.123.7"
+version = "0.123.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "50aef001c7ad250d5fdda2c7481cbfcabe6435c66106adf5760dcb9fb9a8ede4"
+checksum = "62441d3aae3372381e03a121880482158ce90ca3bc2a56607cc122ee07536fe4"
dependencies = [
"arbitrary",
]
[[package]]
name = "cranelift-entity"
-version = "0.123.7"
+version = "0.123.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cf3c84656a010df2b5afaedcbbbd94f1efe175b55e29864df7b99e64bfa40d56"
+checksum = "7bdc9832a010e0d411439aa016e1664dd23ca5c8953bf26b90fe34ad4b76822d"
dependencies = [
"cranelift-bitset",
"serde",
@@ -4110,9 +4066,9 @@ dependencies = [
[[package]]
name = "cranelift-frontend"
-version = "0.123.7"
+version = "0.123.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6aa1d2006915cddb63705db46dcfb8637fe08f91d26fbe59680d7257ec39d609"
+checksum = "9530b689b7c3accdbb32263ca318e19ab3bcf616d3a160c8456537c99b4c565b"
dependencies = [
"cranelift-codegen",
"log",
@@ -4122,15 +4078,15 @@ dependencies = [
[[package]]
name = "cranelift-isle"
-version = "0.123.7"
+version = "0.123.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6e4fecbcbb81273f9aff4559e26fc341f42663da420cca5ac84b34e74e9267e0"
+checksum = "3fcd3258a4d87376f2681c72269a42009286a3d3707b2af4024ba5b3750ad477"
[[package]]
name = "cranelift-native"
-version = "0.123.7"
+version = "0.123.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "976a3d85f197a56ae34ee4d5a5e469855ac52804a09a513d0562d425da0ff56e"
+checksum = "642c5703a22b58abccbf46f46c0dae65f0535bbe725beec70527a1ffcbbc1d34"
dependencies = [
"cranelift-codegen",
"libc",
@@ -4139,9 +4095,9 @@ dependencies = [
[[package]]
name = "cranelift-srcgen"
-version = "0.123.7"
+version = "0.123.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "37fbd4aefce642145491ff862d2054a71b63d2d97b8dd1e280c9fdaf399598b7"
+checksum = "d200dcd5a37de108ec1329e0ba924e2badd2c0ef2343c338310135159ae454e2"
[[package]]
name = "crash-context"
@@ -4156,9 +4112,9 @@ dependencies = [
[[package]]
name = "crash-handler"
-version = "0.6.3"
+version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2066907075af649bcb8bcb1b9b986329b243677e6918b2d920aa64b0aac5ace3"
+checksum = "0df5c9639f4942eb7702b964b3f9adf03a55724a57558cc177407388a8b936e2"
dependencies = [
"cfg-if",
"crash-context",
@@ -4172,15 +4128,11 @@ name = "crashes"
version = "0.1.0"
dependencies = [
"async-process",
- "cfg-if",
"crash-handler",
- "futures 0.3.32",
"log",
"mach2 0.5.0",
"minidumper",
"parking_lot",
- "paths",
- "release_channel",
"serde",
"serde_json",
"system_specs",
@@ -4205,15 +4157,14 @@ checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5"
[[package]]
name = "crc-fast"
-version = "1.6.0"
+version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ddc2d09feefeee8bd78101665bd8645637828fa9317f9f292496dbbd8c65ff3"
+checksum = "2fd92aca2c6001b1bf5ba0ff84ee74ec8501b52bbef0cac80bf25a6c1d87a83d"
dependencies = [
"crc",
"digest",
- "rand 0.9.3",
- "regex",
"rustversion",
+ "spin 0.10.0",
]
[[package]]
@@ -5000,7 +4951,7 @@ dependencies = [
"markdown",
"pretty_assertions",
"project",
- "rand 0.9.3",
+ "rand 0.9.4",
"serde",
"serde_json",
"settings",
@@ -5070,7 +5021,7 @@ dependencies = [
"libc",
"option-ext",
"redox_users",
- "windows-sys 0.61.2",
+ "windows-sys 0.59.0",
]
[[package]]
@@ -5326,7 +5277,7 @@ dependencies = [
"pretty_assertions",
"project",
"pulldown-cmark 0.13.0",
- "rand 0.9.3",
+ "rand 0.9.4",
"regex",
"release_channel",
"semver",
@@ -5391,7 +5342,7 @@ dependencies = [
"pretty_assertions",
"project",
"prompt_store",
- "rand 0.9.3",
+ "rand 0.9.4",
"release_channel",
"reqwest_client",
"rust-embed",
@@ -5516,6 +5467,7 @@ dependencies = [
"aho-corasick",
"anyhow",
"assets",
+ "base64 0.22.1",
"breadcrumbs",
"buffer_diff",
"client",
@@ -5552,7 +5504,7 @@ dependencies = [
"project",
"proptest",
"proptest-derive",
- "rand 0.9.3",
+ "rand 0.9.4",
"regex",
"release_channel",
"rope",
@@ -5574,6 +5526,7 @@ dependencies = [
"tracing",
"tree-sitter-bash",
"tree-sitter-c",
+ "tree-sitter-go",
"tree-sitter-html",
"tree-sitter-md",
"tree-sitter-python",
@@ -5858,7 +5811,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
dependencies = [
"libc",
- "windows-sys 0.61.2",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -6196,58 +6149,6 @@ dependencies = [
"zed_actions",
]
-[[package]]
-name = "external_websocket_sync"
-version = "0.1.0"
-dependencies = [
- "acp_thread",
- "action_log",
- "agent",
- "agent-client-protocol",
- "agent_servers",
- "agent_settings",
- "anyhow",
- "axum 0.7.9",
- "chrono",
- "clock",
- "collections",
- "context_server",
- "env_logger 0.11.8",
- "fs",
- "futures 0.3.32",
- "gpui",
- "http 1.3.1",
- "http_client_tls",
- "indoc",
- "language",
- "language_model",
- "log",
- "parking_lot",
- "project",
- "prompt_store",
- "rustls 0.23.33",
- "schemars 1.0.4",
- "serde",
- "serde_json",
- "session",
- "settings",
- "smol",
- "telemetry_events",
- "tempfile",
- "tokio",
- "tokio-rustls 0.26.2",
- "tokio-tungstenite 0.26.2",
- "tower 0.4.13",
- "tower-http 0.5.2",
- "tungstenite 0.26.2",
- "ui",
- "url",
- "util",
- "uuid",
- "watch",
- "zed-reqwest",
-]
-
[[package]]
name = "failspot"
version = "0.2.0"
@@ -6370,6 +6271,7 @@ dependencies = [
name = "feedback"
version = "0.1.0"
dependencies = [
+ "client",
"extension_host",
"gpui",
"system_specs",
@@ -6505,7 +6407,7 @@ checksum = "4203231de188ebbdfb85c11f3c20ca2b063945710de04e7b59268731e728b462"
dependencies = [
"half",
"num-traits",
- "rand 0.9.3",
+ "rand 0.9.4",
"rand_distr",
]
@@ -6976,7 +6878,7 @@ dependencies = [
"fnv",
"itertools 0.10.5",
"num-traits",
- "rand 0.8.5",
+ "rand 0.8.6",
"rand_pcg",
"random_choice",
"rayon",
@@ -7367,7 +7269,7 @@ dependencies = [
"gobject-sys",
"libc",
"system-deps",
- "windows-sys 0.61.2",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -7388,7 +7290,7 @@ dependencies = [
"log",
"parking_lot",
"pretty_assertions",
- "rand 0.9.3",
+ "rand 0.9.4",
"regex",
"rope",
"schemars 1.0.4",
@@ -7439,7 +7341,7 @@ dependencies = [
"menu",
"project",
"project_panel",
- "rand 0.9.3",
+ "rand 0.9.4",
"remote_connection",
"search",
"serde_json",
@@ -7513,7 +7415,7 @@ dependencies = [
"project",
"prompt_store",
"proto",
- "rand 0.9.3",
+ "rand 0.9.4",
"remote",
"remote_connection",
"schemars 1.0.4",
@@ -7787,7 +7689,6 @@ dependencies = [
"mach2 0.5.0",
"media",
"metal",
- "naga 29.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"num_cpus",
"objc",
"objc2",
@@ -7800,7 +7701,7 @@ dependencies = [
"postage",
"profiling",
"proptest",
- "rand 0.9.3",
+ "rand 0.9.4",
"raw-window-handle",
"refineable",
"regex",
@@ -8036,7 +7937,7 @@ dependencies = [
"itertools 0.14.0",
"log",
"parking_lot",
- "rand 0.9.3",
+ "rand 0.9.4",
"raw-window-handle",
"smallvec",
"util",
@@ -8142,7 +8043,7 @@ dependencies = [
"cfg-if",
"crunchy",
"num-traits",
- "rand 0.9.3",
+ "rand 0.9.4",
"rand_distr",
"zerocopy",
]
@@ -8518,12 +8419,6 @@ version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f"
-[[package]]
-name = "http-range-header"
-version = "0.4.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9171a2ea8a68358193d15dd5d70c1c10a2afc3e7e4c5bc92bc9f025cebd7359c"
-
[[package]]
name = "http_client"
version = "0.1.0"
@@ -8552,8 +8447,7 @@ dependencies = [
name = "http_client_tls"
version = "0.1.0"
dependencies = [
- "rustls 0.23.33",
- "rustls-pki-types",
+ "rustls 0.23.40",
"rustls-platform-verifier",
]
@@ -8619,7 +8513,6 @@ dependencies = [
"http 1.3.1",
"http-body 1.0.1",
"httparse",
- "httpdate",
"itoa",
"pin-project-lite",
"pin-utils",
@@ -8639,26 +8532,24 @@ dependencies = [
"hyper 0.14.32",
"log",
"rustls 0.21.12",
- "rustls-native-certs 0.6.3",
"tokio",
"tokio-rustls 0.24.1",
]
[[package]]
name = "hyper-rustls"
-version = "0.27.7"
+version = "0.27.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58"
+checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f"
dependencies = [
"http 1.3.1",
"hyper 1.7.0",
"hyper-util",
"log",
- "rustls 0.23.33",
- "rustls-native-certs 0.8.2",
- "rustls-pki-types",
+ "rustls 0.23.40",
+ "rustls-native-certs 0.8.3",
"tokio",
- "tokio-rustls 0.26.2",
+ "tokio-rustls 0.26.4",
"tower-service",
]
@@ -8706,7 +8597,7 @@ dependencies = [
"libc",
"percent-encoding",
"pin-project-lite",
- "socket2 0.6.1",
+ "socket2 0.6.3",
"tokio",
"tower-service",
"tracing",
@@ -8724,7 +8615,7 @@ dependencies = [
"js-sys",
"log",
"wasm-bindgen",
- "windows-core 0.62.2",
+ "windows-core 0.56.0",
]
[[package]]
@@ -9163,8 +9054,8 @@ dependencies = [
"fnv",
"lazy_static",
"libc",
- "mio 1.1.0",
- "rand 0.8.5",
+ "mio 1.2.0",
+ "rand 0.8.6",
"serde",
"tempfile",
"uuid",
@@ -9261,9 +9152,9 @@ dependencies = [
[[package]]
name = "itoa"
-version = "1.0.15"
+version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
+checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
[[package]]
name = "jiff"
@@ -9607,7 +9498,7 @@ dependencies = [
"parking_lot",
"postage",
"pretty_assertions",
- "rand 0.9.3",
+ "rand 0.9.4",
"regex",
"rpc",
"semver",
@@ -9740,6 +9631,7 @@ dependencies = [
"base64 0.22.1",
"bedrock",
"client",
+ "clock",
"cloud_api_client",
"cloud_api_types",
"collections",
@@ -9749,9 +9641,11 @@ dependencies = [
"copilot_chat",
"copilot_ui",
"credentials_provider",
+ "db",
"deepseek",
"extension",
"extension_host",
+ "feature_flags",
"fs",
"futures 0.3.32",
"google_ai",
@@ -9780,7 +9674,6 @@ dependencies = [
"ui",
"ui_input",
"util",
- "vercel",
"x_ai",
]
@@ -9914,6 +9807,7 @@ dependencies = [
"smol",
"snippet",
"task",
+ "tempfile",
"terminal",
"theme",
"tree-sitter",
@@ -9981,9 +9875,9 @@ checksum = "2c4a545a15244c7d945065b5d392b2d2d7f21526fba56ce51467b06ed445e8f7"
[[package]]
name = "libc"
-version = "0.2.182"
+version = "0.2.186"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112"
+checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66"
[[package]]
name = "libdbus-sys"
@@ -10203,7 +10097,7 @@ dependencies = [
"parking_lot",
"pbjson-types",
"prost 0.12.6",
- "rand 0.9.3",
+ "rand 0.9.4",
"reqwest 0.12.24",
"rustls-native-certs 0.6.3",
"scopeguard",
@@ -10211,7 +10105,7 @@ dependencies = [
"sha2",
"thiserror 1.0.69",
"tokio",
- "tokio-rustls 0.26.2",
+ "tokio-rustls 0.26.4",
"tokio-tungstenite 0.28.0",
"url",
]
@@ -10363,11 +10257,11 @@ dependencies = [
[[package]]
name = "lru"
-version = "0.12.5"
+version = "0.16.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38"
+checksum = "7f66e8d5d03f609abc3a39e6f08e4164ebf1447a732906d39eb9b99b7919ef39"
dependencies = [
- "hashbrown 0.15.5",
+ "hashbrown 0.16.1",
]
[[package]]
@@ -10551,11 +10445,13 @@ version = "0.1.0"
dependencies = [
"anyhow",
"editor",
+ "fs",
"gpui",
"language",
"log",
"markdown",
"project",
+ "serde_json",
"settings",
"tempfile",
"theme",
@@ -10951,9 +10847,9 @@ dependencies = [
[[package]]
name = "mio"
-version = "1.1.0"
+version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873"
+checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1"
dependencies = [
"libc",
"log",
@@ -11037,7 +10933,7 @@ dependencies = [
"log",
"parking_lot",
"pretty_assertions",
- "rand 0.9.3",
+ "rand 0.9.4",
"rope",
"serde",
"settings",
@@ -11059,31 +10955,6 @@ version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a"
-[[package]]
-name = "naga"
-version = "29.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "85b4372fed0bd362d646d01b6926df0e837859ccc522fed720c395e0460f29c8"
-dependencies = [
- "arrayvec",
- "bit-set 0.9.1",
- "bitflags 2.10.0",
- "cfg-if",
- "cfg_aliases 0.2.1",
- "codespan-reporting",
- "half",
- "hashbrown 0.16.1",
- "hexf-parse",
- "indexmap 2.11.4",
- "libm",
- "log",
- "num-traits",
- "once_cell",
- "rustc-hash 1.1.0",
- "thiserror 2.0.17",
- "unicode-ident",
-]
-
[[package]]
name = "naga"
version = "29.0.0"
@@ -11115,7 +10986,7 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3ffa00dec017b5b1a8b7cf5e2c008bfda1aa7e0697ac1508b491fdf2622fb4d8"
dependencies = [
- "rand 0.8.5",
+ "rand 0.8.6",
]
[[package]]
@@ -11129,17 +11000,17 @@ dependencies = [
[[package]]
name = "native-tls"
-version = "0.2.14"
+version = "0.2.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e"
+checksum = "465500e14ea162429d264d44189adc38b199b62b1c21eea9f69e4b73cb03bbf2"
dependencies = [
"libc",
"log",
"openssl",
- "openssl-probe",
+ "openssl-probe 0.2.1",
"openssl-sys",
"schannel",
- "security-framework 2.11.1",
+ "security-framework 3.5.1",
"security-framework-sys",
"tempfile",
]
@@ -11356,7 +11227,7 @@ dependencies = [
"kqueue",
"libc",
"log",
- "mio 1.1.0",
+ "mio 1.2.0",
"notify-types",
"walkdir",
"windows-sys 0.60.2",
@@ -11393,7 +11264,7 @@ version = "0.50.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"
dependencies = [
- "windows-sys 0.61.2",
+ "windows-sys 0.59.0",
]
[[package]]
@@ -11452,7 +11323,7 @@ dependencies = [
"num-integer",
"num-iter",
"num-traits",
- "rand 0.8.5",
+ "rand 0.8.6",
"smallvec",
"zeroize",
]
@@ -11468,7 +11339,7 @@ dependencies = [
"num-iter",
"num-traits",
"once_cell",
- "rand 0.9.3",
+ "rand 0.9.4",
"serde",
"smallvec",
"zeroize",
@@ -11822,7 +11693,7 @@ dependencies = [
"http-body 1.0.1",
"http-body-util",
"hyper 1.7.0",
- "hyper-rustls 0.27.7",
+ "hyper-rustls 0.27.9",
"hyper-timeout",
"hyper-util",
"jsonwebtoken",
@@ -11962,7 +11833,7 @@ dependencies = [
"language_model_core",
"log",
"pretty_assertions",
- "rand 0.9.3",
+ "rand 0.9.4",
"schemars 1.0.4",
"serde",
"serde_json",
@@ -12016,6 +11887,7 @@ dependencies = [
"futures 0.3.32",
"google_ai",
"http_client",
+ "language_model_core",
"schemars 1.0.4",
"serde",
"serde_json",
@@ -12036,15 +11908,14 @@ dependencies = [
[[package]]
name = "openssl"
-version = "0.10.74"
+version = "0.10.79"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "24ad14dd45412269e1a30f52ad8f0664f0f4f4a89ee8fe28c3b3527021ebb654"
+checksum = "bf0b434746ee2832f4f0baf10137e1cabb18cbe6912c69e2e33263c45250f542"
dependencies = [
"bitflags 2.10.0",
"cfg-if",
"foreign-types 0.3.2",
"libc",
- "once_cell",
"openssl-macros",
"openssl-sys",
]
@@ -12066,11 +11937,17 @@ version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e"
+[[package]]
+name = "openssl-probe"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe"
+
[[package]]
name = "openssl-sys"
-version = "0.9.110"
+version = "0.9.115"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0a9f0075ba3c21b09f8e8b2026584b1d18d49388648f2fbbf3c97ea8deced8e2"
+checksum = "158fe5b292746440aa6e7a7e690e55aeb72d41505e2804c23c6973ad0e9c9781"
dependencies = [
"cc",
"libc",
@@ -13009,7 +12886,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d"
dependencies = [
"phf_shared 0.11.3",
- "rand 0.8.5",
+ "rand 0.8.6",
]
[[package]]
@@ -13597,7 +13474,7 @@ dependencies = [
"prettier",
"pretty_assertions",
"project",
- "rand 0.9.3",
+ "rand 0.9.4",
"regex",
"release_channel",
"remote",
@@ -13774,7 +13651,7 @@ dependencies = [
"bitflags 2.10.0",
"num-traits",
"proptest-macro",
- "rand 0.9.3",
+ "rand 0.9.4",
"rand_chacha 0.9.0",
"rand_xorshift",
"regex-syntax",
@@ -13852,7 +13729,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4"
dependencies = [
"bytes 1.11.1",
- "heck 0.5.0",
+ "heck 0.4.1",
"itertools 0.11.0",
"log",
"multimap",
@@ -14002,9 +13879,9 @@ checksum = "bd348ff538bc9caeda7ee8cad2d1d48236a1f443c1fa3913c6a02fe0043b1dd3"
[[package]]
name = "pulley-interpreter"
-version = "36.0.7"
+version = "36.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a078b4bdfd275fadeefc4f9ae3675ee5af302e69497da439956dd05257858970"
+checksum = "35eaba3163b9faf1d707f0704a7370bfdbe73622c766acdaf1fa4addb87510de"
dependencies = [
"cranelift-bitset",
"log",
@@ -14014,9 +13891,9 @@ dependencies = [
[[package]]
name = "pulley-macros"
-version = "36.0.7"
+version = "36.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9dac91999883fd00b900eb5377be403c5cb8b93e10efcb571bf66454c2d9f231"
+checksum = "ac294897a29ce07919714f9f25c11a819d75759d47eb9f3273845ffea5a5760d"
dependencies = [
"proc-macro2",
"quote",
@@ -14118,8 +13995,8 @@ dependencies = [
"quinn-proto",
"quinn-udp",
"rustc-hash 2.1.1",
- "rustls 0.23.33",
- "socket2 0.6.1",
+ "rustls 0.23.40",
+ "socket2 0.6.3",
"thiserror 2.0.17",
"tokio",
"tracing",
@@ -14128,17 +14005,17 @@ dependencies = [
[[package]]
name = "quinn-proto"
-version = "0.11.13"
+version = "0.11.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31"
+checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098"
dependencies = [
"bytes 1.11.1",
"getrandom 0.3.4",
"lru-slab",
- "rand 0.9.3",
+ "rand 0.9.4",
"ring",
"rustc-hash 2.1.1",
- "rustls 0.23.33",
+ "rustls 0.23.40",
"rustls-pki-types",
"slab",
"thiserror 2.0.17",
@@ -14156,9 +14033,9 @@ dependencies = [
"cfg_aliases 0.2.1",
"libc",
"once_cell",
- "socket2 0.6.1",
+ "socket2 0.6.3",
"tracing",
- "windows-sys 0.60.2",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -14207,9 +14084,9 @@ dependencies = [
[[package]]
name = "rand"
-version = "0.8.5"
+version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a"
dependencies = [
"libc",
"rand_chacha 0.3.1",
@@ -14218,9 +14095,9 @@ dependencies = [
[[package]]
name = "rand"
-version = "0.9.3"
+version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ec095654a25171c2124e9e3393a930bddbffdc939556c914957a4c3e0a87166"
+checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea"
dependencies = [
"rand_chacha 0.9.0",
"rand_core 0.9.3",
@@ -14286,7 +14163,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a8615d50dcf34fa31f7ab52692afec947c4dd0ab803cc87cb3b0b4570ff7463"
dependencies = [
"num-traits",
- "rand 0.9.3",
+ "rand 0.9.4",
]
[[package]]
@@ -14364,7 +14241,7 @@ dependencies = [
"num-traits",
"paste",
"profiling",
- "rand 0.9.3",
+ "rand 0.9.4",
"rand_chacha 0.9.0",
"simd_helpers",
"thiserror 2.0.17",
@@ -14916,22 +14793,22 @@ dependencies = [
"http-body 1.0.1",
"http-body-util",
"hyper 1.7.0",
- "hyper-rustls 0.27.7",
+ "hyper-rustls 0.27.9",
"hyper-util",
"js-sys",
"log",
"percent-encoding",
"pin-project-lite",
"quinn",
- "rustls 0.23.33",
- "rustls-native-certs 0.8.2",
+ "rustls 0.23.40",
+ "rustls-native-certs 0.8.3",
"rustls-pki-types",
"serde",
"serde_json",
"serde_urlencoded",
"sync_wrapper 1.0.2",
"tokio",
- "tokio-rustls 0.26.2",
+ "tokio-rustls 0.26.4",
"tower 0.5.2",
"tower-http 0.6.6",
"tower-service",
@@ -15103,7 +14980,7 @@ dependencies = [
"dasp_sample",
"hound",
"num-rational",
- "rand 0.9.3",
+ "rand 0.9.4",
"rand_distr",
"rtrb",
"symphonia",
@@ -15119,7 +14996,7 @@ dependencies = [
"gpui",
"heapless",
"log",
- "rand 0.9.3",
+ "rand 0.9.4",
"rayon",
"sum_tree",
"tracing",
@@ -15158,7 +15035,7 @@ dependencies = [
"gpui",
"parking_lot",
"proto",
- "rand 0.9.3",
+ "rand 0.9.4",
"rsa",
"serde",
"serde_json",
@@ -15304,7 +15181,7 @@ dependencies = [
"borsh",
"bytes 1.11.1",
"num-traits",
- "rand 0.8.5",
+ "rand 0.8.6",
"rkyv",
"serde",
"serde_json",
@@ -15374,7 +15251,7 @@ dependencies = [
"errno 0.3.14",
"libc",
"linux-raw-sys 0.11.0",
- "windows-sys 0.61.2",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -15412,16 +15289,16 @@ dependencies = [
[[package]]
name = "rustls"
-version = "0.23.33"
+version = "0.23.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "751e04a496ca00bb97a5e043158d23d66b5aabf2e1d5aa2a0aaebb1aafe6f82c"
+checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b"
dependencies = [
"aws-lc-rs",
"log",
"once_cell",
"ring",
"rustls-pki-types",
- "rustls-webpki 0.103.7",
+ "rustls-webpki 0.103.13",
"subtle",
"zeroize",
]
@@ -15432,7 +15309,7 @@ version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00"
dependencies = [
- "openssl-probe",
+ "openssl-probe 0.1.6",
"rustls-pemfile 1.0.4",
"schannel",
"security-framework 2.11.1",
@@ -15440,11 +15317,11 @@ dependencies = [
[[package]]
name = "rustls-native-certs"
-version = "0.8.2"
+version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9980d917ebb0c0536119ba501e90834767bffc3d60641457fd84a1f3fd337923"
+checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63"
dependencies = [
- "openssl-probe",
+ "openssl-probe 0.2.1",
"rustls-pki-types",
"schannel",
"security-framework 3.5.1",
@@ -15489,10 +15366,10 @@ dependencies = [
"jni",
"log",
"once_cell",
- "rustls 0.23.33",
- "rustls-native-certs 0.8.2",
+ "rustls 0.23.40",
+ "rustls-native-certs 0.8.3",
"rustls-platform-verifier-android",
- "rustls-webpki 0.103.7",
+ "rustls-webpki 0.103.13",
"security-framework 3.5.1",
"security-framework-sys",
"webpki-root-certs",
@@ -15517,9 +15394,9 @@ dependencies = [
[[package]]
name = "rustls-webpki"
-version = "0.103.7"
+version = "0.103.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e10b3f4191e8a80e6b43eebabfac91e5dcecebb27a71f04e820c47ec41d314bf"
+checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e"
dependencies = [
"aws-lc-rs",
"ring",
@@ -15565,9 +15442,9 @@ dependencies = [
[[package]]
name = "ryu"
-version = "1.0.20"
+version = "1.0.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
+checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f"
[[package]]
name = "saa"
@@ -15623,7 +15500,7 @@ dependencies = [
"flume",
"futures 0.3.32",
"parking_lot",
- "rand 0.9.3",
+ "rand 0.9.4",
"web-time",
]
@@ -16669,7 +16546,7 @@ version = "0.8.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c1c97747dbf44bb1ca44a561ece23508e99cb592e862f22222dcf42f51d1e451"
dependencies = [
- "heck 0.5.0",
+ "heck 0.4.1",
"proc-macro2",
"quote",
"syn 2.0.117",
@@ -16733,12 +16610,12 @@ dependencies = [
[[package]]
name = "socket2"
-version = "0.6.1"
+version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881"
+checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e"
dependencies = [
"libc",
- "windows-sys 0.60.2",
+ "windows-sys 0.61.2",
]
[[package]]
@@ -16873,7 +16750,7 @@ dependencies = [
"once_cell",
"percent-encoding",
"rust_decimal",
- "rustls 0.23.33",
+ "rustls 0.23.40",
"serde",
"serde_json",
"sha2",
@@ -16957,7 +16834,7 @@ dependencies = [
"memchr",
"once_cell",
"percent-encoding",
- "rand 0.8.5",
+ "rand 0.8.6",
"rsa",
"rust_decimal",
"serde",
@@ -17001,7 +16878,7 @@ dependencies = [
"memchr",
"num-bigint",
"once_cell",
- "rand 0.8.5",
+ "rand 0.8.6",
"rust_decimal",
"serde",
"serde_json",
@@ -17100,7 +16977,7 @@ name = "streaming_diff"
version = "0.1.0"
dependencies = [
"ordered-float 2.10.1",
- "rand 0.9.3",
+ "rand 0.9.4",
"rope",
"util",
]
@@ -17224,7 +17101,7 @@ dependencies = [
"heapless",
"log",
"proptest",
- "rand 0.9.3",
+ "rand 0.9.4",
"rayon",
"tracing",
"zlog",
@@ -17703,7 +17580,6 @@ name = "system_specs"
version = "0.1.0"
dependencies = [
"anyhow",
- "client",
"gpui",
"human_bytes",
"pciid-parser",
@@ -17863,7 +17739,7 @@ dependencies = [
"getrandom 0.3.4",
"once_cell",
"rustix 1.1.2",
- "windows-sys 0.61.2",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -17902,7 +17778,7 @@ dependencies = [
"log",
"parking_lot",
"percent-encoding",
- "rand 0.9.3",
+ "rand 0.9.4",
"regex",
"release_channel",
"schemars 1.0.4",
@@ -17981,7 +17857,7 @@ dependencies = [
"log",
"parking_lot",
"postage",
- "rand 0.9.3",
+ "rand 0.9.4",
"regex",
"rope",
"smallvec",
@@ -18289,8 +18165,6 @@ dependencies = [
"client",
"cloud_api_types",
"db",
- "external_websocket_sync",
- "feature_flags",
"fs",
"git_ui",
"gpui",
@@ -18320,17 +18194,17 @@ dependencies = [
[[package]]
name = "tokio"
-version = "1.48.0"
+version = "1.52.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408"
+checksum = "b67dee974fe86fd92cc45b7a95fdd2f99a36a6d7b0d431a231178d3d670bbcc6"
dependencies = [
"bytes 1.11.1",
"libc",
- "mio 1.1.0",
+ "mio 1.2.0",
"parking_lot",
"pin-project-lite",
"signal-hook-registry",
- "socket2 0.6.1",
+ "socket2 0.6.3",
"tokio-macros",
"windows-sys 0.61.2",
]
@@ -18348,9 +18222,9 @@ dependencies = [
[[package]]
name = "tokio-macros"
-version = "2.6.0"
+version = "2.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5"
+checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496"
dependencies = [
"proc-macro2",
"quote",
@@ -18379,11 +18253,11 @@ dependencies = [
[[package]]
name = "tokio-rustls"
-version = "0.26.2"
+version = "0.26.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b"
+checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61"
dependencies = [
- "rustls 0.23.33",
+ "rustls 0.23.40",
"tokio",
]
@@ -18435,33 +18309,6 @@ dependencies = [
"tungstenite 0.21.0",
]
-[[package]]
-name = "tokio-tungstenite"
-version = "0.24.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9"
-dependencies = [
- "futures-util",
- "log",
- "tokio",
- "tungstenite 0.24.0",
-]
-
-[[package]]
-name = "tokio-tungstenite"
-version = "0.26.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084"
-dependencies = [
- "futures-util",
- "log",
- "rustls 0.23.33",
- "rustls-pki-types",
- "tokio",
- "tokio-rustls 0.26.2",
- "tungstenite 0.26.2",
-]
-
[[package]]
name = "tokio-tungstenite"
version = "0.28.0"
@@ -18470,19 +18317,19 @@ checksum = "d25a406cddcc431a75d3d9afc6a7c0f7428d4891dd973e4d54c56b46127bf857"
dependencies = [
"futures-util",
"log",
- "rustls 0.23.33",
- "rustls-native-certs 0.8.2",
+ "rustls 0.23.40",
+ "rustls-native-certs 0.8.3",
"rustls-pki-types",
"tokio",
- "tokio-rustls 0.26.2",
+ "tokio-rustls 0.26.4",
"tungstenite 0.28.0",
]
[[package]]
name = "tokio-util"
-version = "0.7.16"
+version = "0.7.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5"
+checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098"
dependencies = [
"bytes 1.11.1",
"futures-core",
@@ -18664,38 +18511,13 @@ dependencies = [
"futures-util",
"http 0.2.12",
"http-body 0.4.6",
- "http-range-header 0.3.1",
+ "http-range-header",
"pin-project-lite",
"tower-layer",
"tower-service",
"tracing",
]
-[[package]]
-name = "tower-http"
-version = "0.5.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5"
-dependencies = [
- "bitflags 2.10.0",
- "bytes 1.11.1",
- "futures-util",
- "http 1.3.1",
- "http-body 1.0.1",
- "http-body-util",
- "http-range-header 0.4.2",
- "httpdate",
- "mime",
- "mime_guess",
- "percent-encoding",
- "pin-project-lite",
- "tokio",
- "tokio-util",
- "tower-layer",
- "tower-service",
- "tracing",
-]
-
[[package]]
name = "tower-http"
version = "0.6.6"
@@ -19138,7 +18960,7 @@ dependencies = [
"http 0.2.12",
"httparse",
"log",
- "rand 0.8.5",
+ "rand 0.8.6",
"sha1",
"thiserror 1.0.69",
"url",
@@ -19157,50 +18979,13 @@ dependencies = [
"http 1.3.1",
"httparse",
"log",
- "rand 0.8.5",
+ "rand 0.8.6",
"sha1",
"thiserror 1.0.69",
"url",
"utf-8",
]
-[[package]]
-name = "tungstenite"
-version = "0.24.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "18e5b8366ee7a95b16d32197d0b2604b43a0be89dc5fac9f8e96ccafbaedda8a"
-dependencies = [
- "byteorder",
- "bytes 1.11.1",
- "data-encoding",
- "http 1.3.1",
- "httparse",
- "log",
- "rand 0.8.5",
- "sha1",
- "thiserror 1.0.69",
- "utf-8",
-]
-
-[[package]]
-name = "tungstenite"
-version = "0.26.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13"
-dependencies = [
- "bytes 1.11.1",
- "data-encoding",
- "http 1.3.1",
- "httparse",
- "log",
- "rand 0.9.3",
- "rustls 0.23.33",
- "rustls-pki-types",
- "sha1",
- "thiserror 2.0.17",
- "utf-8",
-]
-
[[package]]
name = "tungstenite"
version = "0.27.0"
@@ -19212,8 +18997,8 @@ dependencies = [
"http 1.3.1",
"httparse",
"log",
- "rand 0.9.3",
- "rustls 0.23.33",
+ "rand 0.9.4",
+ "rustls 0.23.40",
"rustls-pki-types",
"sha1",
"thiserror 2.0.17",
@@ -19231,8 +19016,8 @@ dependencies = [
"http 1.3.1",
"httparse",
"log",
- "rand 0.9.3",
- "rustls 0.23.33",
+ "rand 0.9.4",
+ "rustls 0.23.40",
"rustls-pki-types",
"sha1",
"thiserror 2.0.17",
@@ -19570,7 +19355,7 @@ dependencies = [
"nix 0.29.0",
"percent-encoding",
"pretty_assertions",
- "rand 0.9.3",
+ "rand 0.9.4",
"regex",
"rust-embed",
"schemars 1.0.4",
@@ -19680,16 +19465,6 @@ version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
-[[package]]
-name = "vercel"
-version = "0.1.0"
-dependencies = [
- "anyhow",
- "schemars 1.0.4",
- "serde",
- "strum 0.27.2",
-]
-
[[package]]
name = "version-compare"
version = "0.2.0"
@@ -20159,9 +19934,9 @@ dependencies = [
[[package]]
name = "wasmtime"
-version = "36.0.7"
+version = "36.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b80d5ba38b9b00f60a0665e07dde38e91d884d4a78cd61d777c8cf081a1267c1"
+checksum = "2060d93be880840d764ab537464b916e22c07758ac5d43e5f07cc86fec6d1bec"
dependencies = [
"addr2line",
"anyhow",
@@ -20220,9 +19995,9 @@ dependencies = [
[[package]]
name = "wasmtime-environ"
-version = "36.0.7"
+version = "36.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "44a45d60dea98308decb71a9f7bb35a629696d1fbf7127dbfde42cbc64b8fa33"
+checksum = "902f991ca8c2e5abc03119eb5d7f7f57da1b7c2123addb8214b49c188737711e"
dependencies = [
"anyhow",
"cpp_demangle",
@@ -20247,9 +20022,9 @@ dependencies = [
[[package]]
name = "wasmtime-internal-asm-macros"
-version = "36.0.7"
+version = "36.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd014b4001b6da03d79062d9ad5ec98fa62e34d50e30e46298545282cc2957e4"
+checksum = "b02cec619b54ce7652d1d7676718a42ccf5f16b2fb23c27cd6e3c307bc93907a"
dependencies = [
"cfg-if",
]
@@ -20266,9 +20041,9 @@ dependencies = [
[[package]]
name = "wasmtime-internal-component-macro"
-version = "36.0.7"
+version = "36.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0f2942aa5d44b02061e0c6ab71b23090cf3b300b4519e3b80776ac38edde2e65"
+checksum = "fad82a87bc24b6014c5271e1558e466fd029dcc80896f143b3693394a162f3be"
dependencies = [
"anyhow",
"proc-macro2",
@@ -20281,15 +20056,15 @@ dependencies = [
[[package]]
name = "wasmtime-internal-component-util"
-version = "36.0.7"
+version = "36.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bcb6f974fe739e98034b7e6ec6feb2ab399f4cde7207675f26138bd9a1d65720"
+checksum = "6bc24aba0bfd3d39fa8f0012835bc4d4efc75b1350b5e519181319eb8bb306b2"
[[package]]
name = "wasmtime-internal-cranelift"
-version = "36.0.7"
+version = "36.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4047020866a80aa943e41133e607020e17562126cf81533362275272098a22b1"
+checksum = "54eb7fc20c8692dc96148365d7a00a1b79fee810833c75bdf8ec073a46e4721a"
dependencies = [
"anyhow",
"cfg-if",
@@ -20314,9 +20089,9 @@ dependencies = [
[[package]]
name = "wasmtime-internal-fiber"
-version = "36.0.7"
+version = "36.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7cd172b622993bb8f834f6ca3b7683dfdba72b12db0527824850fdec17c89e5a"
+checksum = "30708e122dcc1e175c66345c209c01752ca0cd20c9021721b6f56968342e9dbe"
dependencies = [
"anyhow",
"cc",
@@ -20330,9 +20105,9 @@ dependencies = [
[[package]]
name = "wasmtime-internal-jit-debug"
-version = "36.0.7"
+version = "36.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1287e310fef4c8759a6b5caa0d44eff9a03ebcd6c273729cc39ce3e321a9e26a"
+checksum = "1eeaab071a646d9ae205266adf186c63fa6d077d36b0b33628dd6c3d321d3195"
dependencies = [
"cc",
"wasmtime-internal-versioned-export-macros",
@@ -20340,9 +20115,9 @@ dependencies = [
[[package]]
name = "wasmtime-internal-jit-icache-coherence"
-version = "36.0.7"
+version = "36.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c02bca30ef670a31496d742d9facdbd0228debe766b1e9541655c0530ff5c953"
+checksum = "09979561e6e4a17bf55722463b066ccb968f010ac6ec5d647e4dff19eddbb19e"
dependencies = [
"anyhow",
"cfg-if",
@@ -20352,24 +20127,24 @@ dependencies = [
[[package]]
name = "wasmtime-internal-math"
-version = "36.0.7"
+version = "36.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fd3a1f51a037ae2c048f0d76d36e27f0d22276295496c44f16a251f24690e003"
+checksum = "9193eb852e5c68aeb95a5ea7538c2bec503023169a0b24430224b4f1ded24988"
dependencies = [
"libm",
]
[[package]]
name = "wasmtime-internal-slab"
-version = "36.0.7"
+version = "36.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ba6171aac3d66e4d69e50080bb6bc5205de2283513984a4118a93cb66dc02994"
+checksum = "289bfa4fbb43f406f36166737f1f25522c215ef2ef11f98423089a6a7590a3d1"
[[package]]
name = "wasmtime-internal-unwinder"
-version = "36.0.7"
+version = "36.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3fd1bc1783391a02176fb687159b1779fc10b71d5350adf09c1f3aa8442a02cc"
+checksum = "4e748c970993865d9bf474465c3f10f96e541c472bc8f7ec0b031779f4ac29c6"
dependencies = [
"anyhow",
"cfg-if",
@@ -20380,9 +20155,9 @@ dependencies = [
[[package]]
name = "wasmtime-internal-versioned-export-macros"
-version = "36.0.7"
+version = "36.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8097e2c8ca02ed65d31dda111faa0888ffbf28dc3ee74355e283118a8d293eb0"
+checksum = "e97e07438cb8b50df3bc9659c56757830a15235c94268dbbd54186524fd4ed84"
dependencies = [
"proc-macro2",
"quote",
@@ -20391,9 +20166,9 @@ dependencies = [
[[package]]
name = "wasmtime-internal-winch"
-version = "36.0.7"
+version = "36.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6a8cb36b61fbcff2c8bcd14f9f2651a6e52b019d0d329324620d7bc971b2b235"
+checksum = "107aa0c3f71cc590c786d6d6e09893558b383f4d78107b864a9fd978929d0244"
dependencies = [
"anyhow",
"cranelift-codegen",
@@ -20408,9 +20183,9 @@ dependencies = [
[[package]]
name = "wasmtime-internal-wit-bindgen"
-version = "36.0.7"
+version = "36.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff555cfb71577028616d65c00221c7fe6eef45a9ebb96fc6d34d4a41fa1de191"
+checksum = "eeb3d8e4efdaae10aa01264e9946bba507e53707125dd0aa8584b5e13229a3c0"
dependencies = [
"anyhow",
"bitflags 2.10.0",
@@ -20421,9 +20196,9 @@ dependencies = [
[[package]]
name = "wasmtime-wasi"
-version = "36.0.6"
+version = "36.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c3c2e99fbaa0c26b4680e0c9af07e3f7b25f5fbc1ad97dd34067980bd027d3e5"
+checksum = "86fffc455304d2750ea2456394cdf6513d8771eb5b256876685b8bb9413bfb0e"
dependencies = [
"anyhow",
"async-trait",
@@ -20452,9 +20227,9 @@ dependencies = [
[[package]]
name = "wasmtime-wasi-io"
-version = "36.0.6"
+version = "36.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "de2dc367052562c228ce51ee4426330840433c29c0ea3349eca5ddeb475ecdb9"
+checksum = "5666a220e8318309225b54a55b270e1b506385adcce10bf5698380441afa0df3"
dependencies = [
"anyhow",
"async-trait",
@@ -20724,7 +20499,7 @@ dependencies = [
"hashbrown 0.16.1",
"js-sys",
"log",
- "naga 29.0.0 (git+https://github.com/zed-industries/wgpu.git?branch=v29)",
+ "naga",
"parking_lot",
"portable-atomic",
"profiling",
@@ -20754,7 +20529,7 @@ dependencies = [
"hashbrown 0.16.1",
"indexmap 2.11.4",
"log",
- "naga 29.0.0 (git+https://github.com/zed-industries/wgpu.git?branch=v29)",
+ "naga",
"once_cell",
"parking_lot",
"portable-atomic",
@@ -20819,7 +20594,7 @@ dependencies = [
"libc",
"libloading",
"log",
- "naga 29.0.0 (git+https://github.com/zed-industries/wgpu.git?branch=v29)",
+ "naga",
"ndk-sys",
"objc2",
"objc2-core-foundation",
@@ -20852,7 +20627,7 @@ name = "wgpu-naga-bridge"
version = "29.0.0"
source = "git+https://github.com/zed-industries/wgpu.git?branch=v29#a466bc382ea747f8e1ac810efdb6dcd49a514575"
dependencies = [
- "naga 29.0.0 (git+https://github.com/zed-industries/wgpu.git?branch=v29)",
+ "naga",
"wgpu-types",
]
@@ -20919,9 +20694,9 @@ dependencies = [
[[package]]
name = "wiggle"
-version = "36.0.6"
+version = "36.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c13d1ae265bd6e5e608827d2535665453cae5cb64950de66e2d5767d3e32c43a"
+checksum = "4e176546937d1311c7608276c8511d3ea9b8e7b916e89b720e12c4d4bbae067c"
dependencies = [
"anyhow",
"async-trait",
@@ -20934,9 +20709,9 @@ dependencies = [
[[package]]
name = "wiggle-generate"
-version = "36.0.6"
+version = "36.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "607c4966f6b30da20d24560220137cbd09df722f0558eac81c05624700af5e05"
+checksum = "e3f012ad76133d9ac70633c7f954e289fb4c21986059f324fec3c476664ab643"
dependencies = [
"anyhow",
"heck 0.5.0",
@@ -20948,9 +20723,9 @@ dependencies = [
[[package]]
name = "wiggle-macro"
-version = "36.0.6"
+version = "36.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fc36e39412fa35f7cc86b3705dbe154168721dd3e71f6dc4a726b266d5c60c55"
+checksum = "4301e6203d3d13eef139fa3aca5f04e9156b4a5f7636ca965b2c10bce410b3d2"
dependencies = [
"proc-macro2",
"quote",
@@ -20980,7 +20755,7 @@ version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
dependencies = [
- "windows-sys 0.61.2",
+ "windows-sys 0.48.0",
]
[[package]]
@@ -20991,9 +20766,9 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "winch-codegen"
-version = "36.0.7"
+version = "36.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0989126b21d12c9923aa2de7ddbcf87db03037b24b7365041d9dd0095b69d8cb"
+checksum = "646e2d01f59d7006e24a370762abfb63d5918696ff02197e027efd15252a1f79"
dependencies = [
"anyhow",
"cranelift-assembler-x64",
@@ -21661,6 +21436,13 @@ version = "0.53.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2"
+[[package]]
+name = "windows_resources"
+version = "0.1.0"
+dependencies = [
+ "embed-resource",
+]
+
[[package]]
name = "windows_x86_64_gnu"
version = "0.42.2"
@@ -22199,7 +21981,7 @@ dependencies = [
"paths",
"postage",
"pretty_assertions",
- "rand 0.9.3",
+ "rand 0.9.4",
"rpc",
"serde",
"serde_json",
@@ -22454,11 +22236,11 @@ dependencies = [
"js-sys",
"nom 8.0.0",
"pin-project",
- "rand 0.8.5",
+ "rand 0.8.6",
"sha1",
"thiserror 1.0.69",
"tokio",
- "tokio-rustls 0.26.2",
+ "tokio-rustls 0.26.4",
"tokio-util",
"url",
"wasm-bindgen",
@@ -22595,7 +22377,7 @@ dependencies = [
[[package]]
name = "zed"
-version = "0.235.0"
+version = "1.2.0"
dependencies = [
"acp_thread",
"acp_tools",
@@ -22648,7 +22430,6 @@ dependencies = [
"extension",
"extension_host",
"extensions_ui",
- "external_websocket_sync",
"feature_flags",
"feedback",
"file_finder",
@@ -22757,7 +22538,7 @@ dependencies = [
"web_search_providers",
"which_key",
"windows 0.61.3",
- "winresource",
+ "windows_resources",
"workspace",
"zed-reqwest",
"zed_actions",
@@ -22806,7 +22587,7 @@ dependencies = [
"http-body 1.0.1",
"http-body-util",
"hyper 1.7.0",
- "hyper-rustls 0.27.7",
+ "hyper-rustls 0.27.9",
"hyper-util",
"ipnet",
"js-sys",
@@ -22817,8 +22598,8 @@ dependencies = [
"percent-encoding",
"pin-project-lite",
"quinn",
- "rustls 0.23.33",
- "rustls-native-certs 0.8.2",
+ "rustls 0.23.40",
+ "rustls-native-certs 0.8.3",
"rustls-pemfile 2.2.0",
"rustls-pki-types",
"serde",
@@ -22827,7 +22608,7 @@ dependencies = [
"sync_wrapper 1.0.2",
"system-configuration 0.6.1",
"tokio",
- "tokio-rustls 0.26.2",
+ "tokio-rustls 0.26.4",
"tokio-socks",
"tokio-util",
"tower 0.5.2",
@@ -22850,7 +22631,7 @@ dependencies = [
"core-graphics-helmer-fork",
"log",
"objc",
- "rand 0.8.5",
+ "rand 0.8.6",
"screencapturekit",
"screencapturekit-sys",
"sysinfo 0.31.4",
@@ -23049,7 +22830,7 @@ dependencies = [
"num-traits",
"once_cell",
"parking_lot",
- "rand 0.9.3",
+ "rand 0.9.4",
"regex",
"scc",
"thiserror 1.0.69",
diff --git a/Cargo.toml b/Cargo.toml
index f9355451d1bfbb..446e92e358d045 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -214,7 +214,6 @@ members = [
"crates/ui_prompt",
"crates/util",
"crates/util_macros",
- "crates/vercel",
"crates/vim",
"crates/vim_mode_setting",
"crates/watch",
@@ -227,6 +226,7 @@ members = [
"crates/x_ai",
"crates/zed",
"crates/zed_actions",
+ "crates/windows_resources",
"crates/zed_credentials_provider",
"crates/zed_env_vars",
"crates/zeta_prompt",
@@ -471,7 +471,6 @@ ui_macros = { path = "crates/ui_macros" }
ui_prompt = { path = "crates/ui_prompt" }
util = { path = "crates/util" }
util_macros = { path = "crates/util_macros" }
-vercel = { path = "crates/vercel" }
vim = { path = "crates/vim" }
vim_mode_setting = { path = "crates/vim_mode_setting" }
which_key = { path = "crates/which_key" }
@@ -556,7 +555,7 @@ core-foundation = "=0.10.0"
core-foundation-sys = "0.8.6"
core-video = { version = "0.5.2", features = ["metal"] }
cpal = "0.17"
-crash-handler = "0.6"
+crash-handler = "0.7"
criterion = { version = "0.5", features = ["html_reports"] }
ctor = "0.4.0"
dap-types = { git = "https://github.com/zed-industries/dap-types", rev = "1b461b310481d01e02b2603c16d7144b926339f8" }
@@ -623,7 +622,6 @@ markup5ever_rcdom = "0.3.0"
metal = "0.33"
minidumper = "0.9"
moka = { version = "0.12.10", features = ["sync"] }
-naga = { version = "29.0", features = ["wgsl-in"] }
nanoid = "0.4"
nbformat = "1.2.0"
nix = "0.29"
@@ -917,6 +915,7 @@ wasmtime = { opt-level = 3 }
cranelift-codegen = { opt-level = 3 }
wasmtime-environ = { opt-level = 3 }
wasmtime-internal-cranelift = { opt-level = 3 }
+minidumper = { opt-level = 3 }
# Build single-source-file crates with cg=1 as it helps make `cargo build` of a whole workspace a bit faster
activity_indicator = { codegen-units = 1 }
assets = { codegen-units = 1 }
diff --git a/assets/icons/ai_v_zero.svg b/assets/icons/ai_v_zero.svg
deleted file mode 100644
index 26d09ea26ac12e..00000000000000
--- a/assets/icons/ai_v_zero.svg
+++ /dev/null
@@ -1,16 +0,0 @@
-
diff --git a/assets/icons/open_new_window.svg b/assets/icons/open_new_window.svg
deleted file mode 100644
index c81d49f9ff9edf..00000000000000
--- a/assets/icons/open_new_window.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
diff --git a/assets/keymaps/default-linux.json b/assets/keymaps/default-linux.json
index a72cd743596d0d..66f527ef0244d6 100644
--- a/assets/keymaps/default-linux.json
+++ b/assets/keymaps/default-linux.json
@@ -1071,6 +1071,8 @@
"ctrl-shift-enter": "git::Amend",
"alt-up": "git_panel::FocusChanges",
"alt-l": "git::GenerateCommitMessage",
+ "shift-escape": "git::ExpandCommitEditor",
+ "alt-shift-escape": "git::ToggleFillCommitEditor",
},
},
{
@@ -1534,4 +1536,18 @@
"ctrl-shift-backspace": "worktree_picker::DeleteWorktree",
},
},
+ {
+ "context": "GitGraph",
+ "bindings": {
+ "tab": "git_graph::FocusNextTabStop",
+ "shift-tab": "git_graph::FocusPreviousTabStop",
+ },
+ },
+ {
+ "context": "GitGraphSearchBar > Editor",
+ "bindings": {
+ "tab": "git_graph::FocusNextTabStop",
+ "shift-tab": "git_graph::FocusPreviousTabStop",
+ },
+ },
]
diff --git a/assets/keymaps/default-macos.json b/assets/keymaps/default-macos.json
index 4f26eeeb8b3d0a..d73c6d7a8b65de 100644
--- a/assets/keymaps/default-macos.json
+++ b/assets/keymaps/default-macos.json
@@ -1102,6 +1102,7 @@
"shift-tab": "git_panel::FocusChanges",
"alt-up": "git_panel::FocusChanges",
"shift-escape": "git::ExpandCommitEditor",
+ "alt-shift-escape": "git::ToggleFillCommitEditor",
"alt-tab": "git::GenerateCommitMessage",
},
},
@@ -1263,6 +1264,7 @@
"ctrl-cmd-space": "terminal::ShowCharacterPalette",
"cmd-c": "terminal::Copy",
"cmd-v": "terminal::Paste",
+ "ctrl-cmd-v": "terminal::PasteText",
"cmd-f": "buffer_search::Deploy",
"cmd-a": "editor::SelectAll",
"cmd-k": "terminal::Clear",
@@ -1626,4 +1628,18 @@
"escape": "notebook::EnterCommandMode",
},
},
+ {
+ "context": "GitGraph",
+ "bindings": {
+ "tab": "git_graph::FocusNextTabStop",
+ "shift-tab": "git_graph::FocusPreviousTabStop",
+ },
+ },
+ {
+ "context": "GitGraphSearchBar > Editor",
+ "bindings": {
+ "tab": "git_graph::FocusNextTabStop",
+ "shift-tab": "git_graph::FocusPreviousTabStop",
+ },
+ },
]
diff --git a/assets/keymaps/default-windows.json b/assets/keymaps/default-windows.json
index 8651bfbe3b4b93..fc1d78b39f29c3 100644
--- a/assets/keymaps/default-windows.json
+++ b/assets/keymaps/default-windows.json
@@ -1069,6 +1069,8 @@
"ctrl-shift-enter": "git::Amend",
"alt-up": "git_panel::FocusChanges",
"alt-l": "git::GenerateCommitMessage",
+ "shift-escape": "git::ExpandCommitEditor",
+ "alt-shift-escape": "git::ToggleFillCommitEditor",
},
},
{
@@ -1219,6 +1221,7 @@
"shift-insert": "terminal::Paste",
"ctrl-v": "terminal::Paste",
"ctrl-shift-v": "terminal::Paste",
+ "ctrl-alt-v": "terminal::PasteText",
"ctrl-i": "assistant::InlineAssist",
"alt-b": ["terminal::SendText", "\u001bb"],
"alt-f": ["terminal::SendText", "\u001bf"],
@@ -1226,6 +1229,7 @@
"ctrl-delete": ["terminal::SendText", "\u001bd"],
"ctrl-n": "workspace::NewTerminal",
// Overrides for conflicting keybindings
+ "alt-f4": "workspace::CloseWindow",
"ctrl-b": ["terminal::SendKeystroke", "ctrl-b"],
"ctrl-c": ["terminal::SendKeystroke", "ctrl-c"],
"ctrl-e": ["terminal::SendKeystroke", "ctrl-e"],
@@ -1550,4 +1554,18 @@
"escape": "notebook::EnterCommandMode",
},
},
+ {
+ "context": "GitGraph",
+ "bindings": {
+ "tab": "git_graph::FocusNextTabStop",
+ "shift-tab": "git_graph::FocusPreviousTabStop",
+ },
+ },
+ {
+ "context": "GitGraphSearchBar > Editor",
+ "bindings": {
+ "tab": "git_graph::FocusNextTabStop",
+ "shift-tab": "git_graph::FocusPreviousTabStop",
+ },
+ },
]
diff --git a/assets/keymaps/vim.json b/assets/keymaps/vim.json
index 4d93761eaeab0e..88e8e35204042c 100644
--- a/assets/keymaps/vim.json
+++ b/assets/keymaps/vim.json
@@ -1033,6 +1033,31 @@
"enter": "menu::Cancel",
},
},
+ {
+ "context": "GitGraph",
+ "bindings": {
+ "tab": "git_graph::FocusNextTabStop",
+ "shift-tab": "git_graph::FocusPreviousTabStop",
+ },
+ },
+ {
+ "context": "GitGraphSearchBar > Editor",
+ "bindings": {
+ "tab": "git_graph::FocusNextTabStop",
+ "shift-tab": "git_graph::FocusPreviousTabStop",
+ },
+ },
+ {
+ "context": "GitGraph && !GitGraphSearchBar",
+ "bindings": {
+ "j": "vim::MenuSelectNext",
+ "k": "vim::MenuSelectPrevious",
+ "ctrl-d": "git_graph::ScrollDown",
+ "ctrl-u": "git_graph::ScrollUp",
+ "shift-g": "menu::SelectLast",
+ "g g": "menu::SelectFirst"
+ }
+ },
{
"context": "GitPanel && ChangesList && !GitBranchSelector",
"use_key_equivalents": true,
diff --git a/assets/settings/default.json b/assets/settings/default.json
index 95541be4773908..56975391702195 100644
--- a/assets/settings/default.json
+++ b/assets/settings/default.json
@@ -230,15 +230,16 @@
//
// Default: "bar"
"cursor_shape": "bar",
- // Determines when the mouse cursor should be hidden in an editor or input box.
+ // Determines when the mouse cursor should be hidden in response to keyboard
+ // input.
//
// 1. Never hide the mouse cursor:
// "never"
// 2. Hide only when typing:
// "on_typing"
- // 3. Hide on both typing and cursor movement:
- // "on_typing_and_movement"
- "hide_mouse": "on_typing_and_movement",
+ // 3. Hide on typing and on key bindings that resolve to an action:
+ // "on_typing_and_action"
+ "hide_mouse": "on_typing_and_action",
// Determines whether the focused panel follows the mouse location.
"focus_follows_mouse": {
"enabled": false,
@@ -361,6 +362,8 @@
// 1. Vertically center the target in the viewport: `center` (default)
// 2. Scroll the minimum amount needed to make the target visible: `minimum`
// 3. Scroll so the target appears near the top of the viewport: `top`
+ // 4. Preserve the cursor's vertical position within the viewport, falling back to `center` when the cursor is
+ // offscreen: `preserve`
"go_to_definition_scroll_strategy": "center",
// Which level to use to filter out diagnostics displayed in the editor.
//
@@ -1105,13 +1108,18 @@
"create_directory": true,
"delete_path": true,
"diagnostics": true,
+ "apply_code_action": true,
"edit_file": true,
"fetch": true,
+ "find_path": true,
+ "find_references": true,
+ "get_code_actions": true,
+ "go_to_definition": true,
"list_directory": true,
"project_notifications": false,
"move_path": true,
"now": true,
- "find_path": true,
+ "rename_symbol": true,
"read_file": true,
"restore_file_from_disk": true,
"save_file": true,
@@ -1135,6 +1143,9 @@
"project_notifications": false,
"now": true,
"find_path": true,
+ "find_references": true,
+ "get_code_actions": true,
+ "go_to_definition": true,
"read_file": true,
"open": true,
"grep": true,
@@ -1150,10 +1161,6 @@
"tools": {},
},
},
- // Whether to start a new thread in the current local project or in a new Git worktree.
- //
- // Default: local_project
- "new_thread_location": "local_project",
// Where to show notifications when the agent has either completed
// its response, or else needs confirmation before it can run a
// tool action.
@@ -2261,7 +2268,16 @@
"language_servers": ["basedpyright", "ruff", "!ty", "!pyrefly", "!pyright", "!pylsp", "..."],
},
"Ruby": {
- "language_servers": ["solargraph", "!ruby-lsp", "!rubocop", "!sorbet", "!steep", "!kanayago", "..."],
+ "language_servers": [
+ "solargraph",
+ "!ruby-lsp",
+ "!rubocop",
+ "!sorbet",
+ "!steep",
+ "!kanayago",
+ "!fuzzy-ruby-server",
+ "...",
+ ],
},
"Rust": {
"debuggers": ["CodeLLDB"],
@@ -2358,9 +2374,6 @@
"mistral": {
"api_url": "https://api.mistral.ai/v1",
},
- "vercel": {
- "api_url": "https://api.v0.dev/v1",
- },
"vercel_ai_gateway": {
"api_url": "https://ai-gateway.vercel.sh/v1",
},
diff --git a/codebook.toml b/codebook.toml
deleted file mode 100644
index 57cdd2569c350b..00000000000000
--- a/codebook.toml
+++ /dev/null
@@ -1 +0,0 @@
-words = ["breakpoint"]
diff --git a/crates/acp_thread/src/acp_thread.rs b/crates/acp_thread/src/acp_thread.rs
index 992c480cad7b49..070346df7ce967 100644
--- a/crates/acp_thread/src/acp_thread.rs
+++ b/crates/acp_thread/src/acp_thread.rs
@@ -308,10 +308,15 @@ impl ToolCall {
let subagent_session_info = subagent_session_info_from_meta(&tool_call.meta);
+ let label = if tool_call.kind == acp::ToolKind::Execute {
+ cx.new(|cx| Markdown::new_text(title.into(), cx))
+ } else {
+ cx.new(|cx| Markdown::new(title.into(), Some(language_registry.clone()), None, cx))
+ };
+
let result = Self {
id: tool_call.tool_call_id,
- label: cx
- .new(|cx| Markdown::new(title.into(), Some(language_registry.clone()), None, cx)),
+ label,
kind: tool_call.kind,
content,
locations: tool_call.locations,
@@ -1198,6 +1203,7 @@ pub enum LoadError {
FailedToInstall(SharedString),
Exited {
status: ExitStatus,
+ stderr: Option,
},
Other(SharedString),
}
@@ -1216,7 +1222,7 @@ impl Display for LoadError {
)
}
LoadError::FailedToInstall(msg) => write!(f, "Failed to install: {msg}"),
- LoadError::Exited { status } => write!(f, "Server exited with status {status}"),
+ LoadError::Exited { status, .. } => write!(f, "Server exited with status {status}"),
LoadError::Other(msg) => write!(f, "{msg}"),
}
}
@@ -5348,7 +5354,7 @@ mod tests {
{
let stopped_count = stopped_count.clone();
move |_, _, event: &AcpThreadEvent, _| {
- if matches!(event, AcpThreadEvent::Stopped) {
+ if matches!(event, AcpThreadEvent::Stopped(_)) {
*stopped_count.borrow_mut() += 1;
}
}
@@ -5420,7 +5426,7 @@ mod tests {
{
let stopped_count = stopped_count.clone();
move |_, _, event: &AcpThreadEvent, _| {
- if matches!(event, AcpThreadEvent::Stopped) {
+ if matches!(event, AcpThreadEvent::Stopped(_)) {
*stopped_count.borrow_mut() += 1;
}
}
diff --git a/crates/acp_thread/src/mention.rs b/crates/acp_thread/src/mention.rs
index 403b71736c9470..4d52c202c633e4 100644
--- a/crates/acp_thread/src/mention.rs
+++ b/crates/acp_thread/src/mention.rs
@@ -12,7 +12,10 @@ use std::{
use ui::{App, IconName, SharedString};
use url::Url;
use urlencoding::decode;
-use util::{ResultExt, paths::PathStyle};
+use util::{
+ ResultExt,
+ paths::{PathStyle, PathWithPosition, is_absolute},
+};
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, Hash)]
pub enum MentionUri {
@@ -65,6 +68,11 @@ pub enum MentionUri {
impl MentionUri {
pub fn parse(input: &str, path_style: PathStyle) -> Result {
+ let input = input
+ .strip_prefix('`')
+ .and_then(|input| input.strip_suffix('`'))
+ .unwrap_or(input);
+
fn parse_line_range(fragment: &str) -> Result> {
let range = fragment.strip_prefix("L").unwrap_or(fragment);
@@ -92,6 +100,39 @@ impl MentionUri {
Ok(start_line..=end_line)
}
+ let parse_absolute_path = |input: &str| -> Result {
+ let (path_input, fragment) = input
+ .split_once('#')
+ .map_or((input, None), |(path, fragment)| (path, Some(fragment)));
+
+ if let Some(fragment) = fragment.and_then(|fragment| parse_line_range(fragment).ok()) {
+ return Ok(MentionUri::Selection {
+ abs_path: Some(path_input.into()),
+ line_range: fragment,
+ });
+ }
+
+ let path_with_position = PathWithPosition::parse_str(path_input);
+ let abs_path = path_with_position.path;
+ if let Some(row) = path_with_position.row {
+ let line = row
+ .checked_sub(1)
+ .context("Line numbers should be 1-based")?;
+ // TODO: Preserve column info too.
+ Ok(MentionUri::Selection {
+ abs_path: Some(abs_path),
+ line_range: line..=line,
+ })
+ } else {
+ Ok(MentionUri::File { abs_path })
+ }
+ };
+
+ if is_absolute(input, path_style) && !input.contains("://") {
+ return parse_absolute_path(input)
+ .with_context(|| format!("Invalid absolute path mention URI: {input}"));
+ }
+
let url = url::Url::parse(input)?;
let path = url.path();
match url.scheme() {
@@ -737,6 +778,153 @@ mod tests {
assert!(MentionUri::parse("zed:///agent/unknown/test", PathStyle::local()).is_err());
}
+ #[test]
+ fn test_parse_absolute_file_path() {
+ let file_path = path!("/path/to/file.rs");
+ let parsed = MentionUri::parse(file_path, PathStyle::local()).unwrap();
+ match &parsed {
+ MentionUri::File { abs_path } => {
+ assert_eq!(abs_path, Path::new(file_path));
+ }
+ _ => panic!("Expected File variant"),
+ }
+ }
+
+ #[test]
+ fn test_parse_absolute_file_path_with_row() {
+ let file_path = "/path/to/file.rs:42";
+ let parsed = MentionUri::parse(file_path, PathStyle::Posix).unwrap();
+ match &parsed {
+ MentionUri::Selection {
+ abs_path: path,
+ line_range,
+ } => {
+ assert_eq!(path.as_ref().unwrap(), Path::new("/path/to/file.rs"));
+ assert_eq!(line_range.start(), &41);
+ assert_eq!(line_range.end(), &41);
+ }
+ _ => panic!("Expected Selection variant"),
+ }
+ }
+
+ #[test]
+ fn test_parse_absolute_file_path_with_fragment_line() {
+ let file_path = "/path/to/file.rs#L42";
+ let parsed = MentionUri::parse(file_path, PathStyle::Posix).unwrap();
+ match &parsed {
+ MentionUri::Selection {
+ abs_path: path,
+ line_range,
+ } => {
+ assert_eq!(path.as_ref().unwrap(), Path::new("/path/to/file.rs"));
+ assert_eq!(line_range.start(), &41);
+ assert_eq!(line_range.end(), &41);
+ }
+ _ => panic!("Expected Selection variant"),
+ }
+ }
+
+ #[test]
+ fn test_parse_absolute_windows_path() {
+ let file_path = "C:\\Users\\zed\\project\\main.rs";
+ let parsed = MentionUri::parse(file_path, PathStyle::Windows).unwrap();
+ match &parsed {
+ MentionUri::File { abs_path } => {
+ assert_eq!(abs_path, Path::new("C:\\Users\\zed\\project\\main.rs"));
+ }
+ _ => panic!("Expected File variant"),
+ }
+ }
+
+ #[test]
+ fn test_parse_absolute_windows_file_path_with_row() {
+ let file_path = "C:\\Users\\zed\\project\\main.rs:42";
+ let parsed = MentionUri::parse(file_path, PathStyle::Windows).unwrap();
+ match &parsed {
+ MentionUri::Selection {
+ abs_path: path,
+ line_range,
+ } => {
+ assert_eq!(
+ path.as_ref().unwrap(),
+ Path::new("C:\\Users\\zed\\project\\main.rs")
+ );
+ assert_eq!(line_range.start(), &41);
+ assert_eq!(line_range.end(), &41);
+ }
+ _ => panic!("Expected Selection variant"),
+ }
+ }
+
+ #[test]
+ fn test_parse_absolute_windows_file_path_with_fragment_line() {
+ let file_path = "C:\\Users\\zed\\project\\main.rs#L42";
+ let parsed = MentionUri::parse(file_path, PathStyle::Windows).unwrap();
+ match &parsed {
+ MentionUri::Selection {
+ abs_path: path,
+ line_range,
+ } => {
+ assert_eq!(
+ path.as_ref().unwrap(),
+ Path::new("C:\\Users\\zed\\project\\main.rs")
+ );
+ assert_eq!(line_range.start(), &41);
+ assert_eq!(line_range.end(), &41);
+ }
+ _ => panic!("Expected Selection variant"),
+ }
+ }
+
+ #[test]
+ fn test_parse_backticked_absolute_file_path() {
+ let file_path = "`/path/to/file.rs`";
+ let parsed = MentionUri::parse(file_path, PathStyle::Posix).unwrap();
+ match &parsed {
+ MentionUri::File { abs_path } => {
+ assert_eq!(abs_path, Path::new("/path/to/file.rs"));
+ }
+ _ => panic!("Expected File variant"),
+ }
+ }
+
+ #[test]
+ fn test_parse_backticked_absolute_file_path_with_fragment_line() {
+ let file_path = "`/path/to/file.rs#L42`";
+ let parsed = MentionUri::parse(file_path, PathStyle::Posix).unwrap();
+ match &parsed {
+ MentionUri::Selection {
+ abs_path: path,
+ line_range,
+ } => {
+ assert_eq!(path.as_ref().unwrap(), Path::new("/path/to/file.rs"));
+ assert_eq!(line_range.start(), &41);
+ assert_eq!(line_range.end(), &41);
+ }
+ _ => panic!("Expected Selection variant"),
+ }
+ }
+
+ #[test]
+ fn test_parse_backticked_absolute_windows_file_path_with_fragment_line() {
+ let file_path = "`C:\\Users\\zed\\project\\main.rs#L42`";
+ let parsed = MentionUri::parse(file_path, PathStyle::Windows).unwrap();
+ match &parsed {
+ MentionUri::Selection {
+ abs_path: path,
+ line_range,
+ } => {
+ assert_eq!(
+ path.as_ref().unwrap(),
+ Path::new("C:\\Users\\zed\\project\\main.rs")
+ );
+ assert_eq!(line_range.start(), &41);
+ assert_eq!(line_range.end(), &41);
+ }
+ _ => panic!("Expected Selection variant"),
+ }
+ }
+
#[test]
fn test_single_line_number() {
// https://github.com/zed-industries/zed/issues/46114
diff --git a/crates/activity_indicator/src/activity_indicator.rs b/crates/activity_indicator/src/activity_indicator.rs
index 7aa5b91a4c2f7f..0abb0622f9e64f 100644
--- a/crates/activity_indicator/src/activity_indicator.rs
+++ b/crates/activity_indicator/src/activity_indicator.rs
@@ -729,13 +729,7 @@ impl Render for ActivityIndicator {
}
})
.label_size(LabelSize::Small)
- .when(content.icon.is_some(), |this| {
- this.start_icon(
- Icon::new(IconName::LoadCircle)
- .color(Color::Muted)
- .size(IconSize::Small),
- )
- })
+ .loading(content.icon.is_some())
.map(|button| {
if truncate_content {
button.tooltip(Tooltip::text(content.message))
diff --git a/crates/agent/Cargo.toml b/crates/agent/Cargo.toml
index ce472fd9e36ee9..13172212064e3f 100644
--- a/crates/agent/Cargo.toml
+++ b/crates/agent/Cargo.toml
@@ -31,7 +31,6 @@ cloud_llm_client.workspace = true
collections.workspace = true
context_server.workspace = true
db.workspace = true
-derive_more.workspace = true
feature_flags.workspace = true
fs.workspace = true
futures.workspace = true
diff --git a/crates/agent/src/agent.rs b/crates/agent/src/agent.rs
index 8747298290ff63..1dc1d9be95138e 100644
--- a/crates/agent/src/agent.rs
+++ b/crates/agent/src/agent.rs
@@ -1,5 +1,4 @@
mod db;
-mod edit_agent;
mod legacy_thread;
mod native_agent_server;
pub mod outline;
diff --git a/crates/agent/src/db.rs b/crates/agent/src/db.rs
index 0ed03ed51703b0..a34290742ad59a 100644
--- a/crates/agent/src/db.rs
+++ b/crates/agent/src/db.rs
@@ -261,7 +261,7 @@ impl DbThread {
tool_use_id: tool_result.tool_use_id,
tool_name: name.into(),
is_error: tool_result.is_error,
- content: tool_result.content,
+ content: vec![tool_result.content],
output: tool_result.output,
},
);
diff --git a/crates/agent/src/edit_agent.rs b/crates/agent/src/edit_agent.rs
deleted file mode 100644
index afaa124de066d9..00000000000000
--- a/crates/agent/src/edit_agent.rs
+++ /dev/null
@@ -1,1527 +0,0 @@
-mod create_file_parser;
-mod edit_parser;
-#[cfg(all(test, feature = "unit-eval"))]
-mod evals;
-pub mod reindent;
-pub mod streaming_fuzzy_matcher;
-
-use crate::{Template, Templates};
-use action_log::ActionLog;
-use anyhow::Result;
-use create_file_parser::{CreateFileParser, CreateFileParserEvent};
-pub use edit_parser::EditFormat;
-use edit_parser::{EditParser, EditParserEvent, EditParserMetrics};
-use futures::{
- Stream, StreamExt,
- channel::mpsc::{self, UnboundedReceiver},
- pin_mut,
- stream::BoxStream,
-};
-use gpui::{AppContext, AsyncApp, Entity, Task};
-use language::{Anchor, Buffer, BufferSnapshot, LineIndent, Point, TextBufferSnapshot};
-use language_model::{
- CompletionIntent, LanguageModel, LanguageModelCompletionError, LanguageModelRequest,
- LanguageModelRequestMessage, LanguageModelToolChoice, MessageContent, Role,
-};
-use project::{AgentLocation, Project};
-use reindent::{IndentDelta, Reindenter};
-use schemars::JsonSchema;
-use serde::{Deserialize, Serialize};
-use std::{mem, ops::Range, pin::Pin, sync::Arc, task::Poll};
-use streaming_diff::{CharOperation, StreamingDiff};
-use streaming_fuzzy_matcher::StreamingFuzzyMatcher;
-
-#[derive(Serialize)]
-struct CreateFilePromptTemplate {
- path: Option,
- edit_description: String,
-}
-
-impl Template for CreateFilePromptTemplate {
- const TEMPLATE_NAME: &'static str = "create_file_prompt.hbs";
-}
-
-#[derive(Serialize)]
-struct EditFileXmlPromptTemplate {
- path: Option,
- edit_description: String,
-}
-
-impl Template for EditFileXmlPromptTemplate {
- const TEMPLATE_NAME: &'static str = "edit_file_prompt_xml.hbs";
-}
-
-#[derive(Serialize)]
-struct EditFileDiffFencedPromptTemplate {
- path: Option,
- edit_description: String,
-}
-
-impl Template for EditFileDiffFencedPromptTemplate {
- const TEMPLATE_NAME: &'static str = "edit_file_prompt_diff_fenced.hbs";
-}
-
-#[derive(Clone, Debug, PartialEq, Eq)]
-pub enum EditAgentOutputEvent {
- ResolvingEditRange(Range),
- UnresolvedEditRange,
- AmbiguousEditRange(Vec>),
- Edited(Range),
-}
-
-#[derive(Clone, Debug, Serialize, Deserialize, JsonSchema)]
-pub struct EditAgentOutput {
- pub raw_edits: String,
- pub parser_metrics: EditParserMetrics,
-}
-
-#[derive(Clone)]
-pub struct EditAgent {
- model: Arc,
- action_log: Entity,
- project: Entity,
- templates: Arc,
- edit_format: EditFormat,
- thinking_allowed: bool,
- update_agent_location: bool,
-}
-
-impl EditAgent {
- pub fn new(
- model: Arc,
- project: Entity,
- action_log: Entity,
- templates: Arc,
- edit_format: EditFormat,
- allow_thinking: bool,
- update_agent_location: bool,
- ) -> Self {
- EditAgent {
- model,
- project,
- action_log,
- templates,
- edit_format,
- thinking_allowed: allow_thinking,
- update_agent_location,
- }
- }
-
- pub fn overwrite(
- &self,
- buffer: Entity,
- edit_description: String,
- conversation: &LanguageModelRequest,
- cx: &mut AsyncApp,
- ) -> (
- Task>,
- mpsc::UnboundedReceiver,
- ) {
- let this = self.clone();
- let (events_tx, events_rx) = mpsc::unbounded();
- let conversation = conversation.clone();
- let output = cx.spawn(async move |cx| {
- let snapshot = buffer.read_with(cx, |buffer, _| buffer.snapshot());
- let path = cx.update(|cx| snapshot.resolve_file_path(true, cx));
- let prompt = CreateFilePromptTemplate {
- path,
- edit_description,
- }
- .render(&this.templates)?;
- let new_chunks = this
- .request(conversation, CompletionIntent::CreateFile, prompt, cx)
- .await?;
-
- let (output, mut inner_events) = this.overwrite_with_chunks(buffer, new_chunks, cx);
- while let Some(event) = inner_events.next().await {
- events_tx.unbounded_send(event).ok();
- }
- output.await
- });
- (output, events_rx)
- }
-
- fn overwrite_with_chunks(
- &self,
- buffer: Entity,
- edit_chunks: impl 'static + Send + Stream- >,
- cx: &mut AsyncApp,
- ) -> (
- Task>,
- mpsc::UnboundedReceiver,
- ) {
- let (output_events_tx, output_events_rx) = mpsc::unbounded();
- let (parse_task, parse_rx) = Self::parse_create_file_chunks(edit_chunks, cx);
- let this = self.clone();
- let task = cx.spawn(async move |cx| {
- this.action_log
- .update(cx, |log, cx| log.buffer_created(buffer.clone(), cx));
- this.overwrite_with_chunks_internal(buffer, parse_rx, output_events_tx, cx)
- .await?;
- parse_task.await
- });
- (task, output_events_rx)
- }
-
- async fn overwrite_with_chunks_internal(
- &self,
- buffer: Entity,
- mut parse_rx: UnboundedReceiver>,
- output_events_tx: mpsc::UnboundedSender,
- cx: &mut AsyncApp,
- ) -> Result<()> {
- let buffer_id = cx.update(|cx| {
- let buffer_id = buffer.read(cx).remote_id();
- if self.update_agent_location {
- self.project.update(cx, |project, cx| {
- project.set_agent_location(
- Some(AgentLocation {
- buffer: buffer.downgrade(),
- position: language::Anchor::min_for_buffer(buffer_id),
- }),
- cx,
- )
- });
- }
- buffer_id
- });
-
- let send_edit_event = || {
- output_events_tx
- .unbounded_send(EditAgentOutputEvent::Edited(
- Anchor::min_max_range_for_buffer(buffer_id),
- ))
- .ok()
- };
- let set_agent_location = |cx: &mut _| {
- if self.update_agent_location {
- self.project.update(cx, |project, cx| {
- project.set_agent_location(
- Some(AgentLocation {
- buffer: buffer.downgrade(),
- position: language::Anchor::max_for_buffer(buffer_id),
- }),
- cx,
- )
- })
- }
- };
- let mut first_chunk = true;
- while let Some(event) = parse_rx.next().await {
- match event? {
- CreateFileParserEvent::NewTextChunk { chunk } => {
- cx.update(|cx| {
- buffer.update(cx, |buffer, cx| {
- if mem::take(&mut first_chunk) {
- buffer.set_text(chunk, cx)
- } else {
- buffer.append(chunk, cx)
- }
- });
- self.action_log
- .update(cx, |log, cx| log.buffer_edited(buffer.clone(), cx));
- set_agent_location(cx);
- });
- send_edit_event();
- }
- }
- }
-
- if first_chunk {
- cx.update(|cx| {
- buffer.update(cx, |buffer, cx| buffer.set_text("", cx));
- self.action_log
- .update(cx, |log, cx| log.buffer_edited(buffer.clone(), cx));
- set_agent_location(cx);
- });
- send_edit_event();
- }
-
- Ok(())
- }
-
- pub fn edit(
- &self,
- buffer: Entity,
- edit_description: String,
- conversation: &LanguageModelRequest,
- cx: &mut AsyncApp,
- ) -> (
- Task>,
- mpsc::UnboundedReceiver,
- ) {
- let this = self.clone();
- let (events_tx, events_rx) = mpsc::unbounded();
- let conversation = conversation.clone();
- let edit_format = self.edit_format;
- let output = cx.spawn(async move |cx| {
- let snapshot = buffer.read_with(cx, |buffer, _| buffer.snapshot());
- let path = cx.update(|cx| snapshot.resolve_file_path(true, cx));
- let prompt = match edit_format {
- EditFormat::XmlTags => EditFileXmlPromptTemplate {
- path,
- edit_description,
- }
- .render(&this.templates)?,
- EditFormat::DiffFenced => EditFileDiffFencedPromptTemplate {
- path,
- edit_description,
- }
- .render(&this.templates)?,
- };
-
- let edit_chunks = this
- .request(conversation, CompletionIntent::EditFile, prompt, cx)
- .await?;
- this.apply_edit_chunks(buffer, edit_chunks, events_tx, cx)
- .await
- });
- (output, events_rx)
- }
-
- async fn apply_edit_chunks(
- &self,
- buffer: Entity,
- edit_chunks: impl 'static + Send + Stream
- >,
- output_events: mpsc::UnboundedSender,
- cx: &mut AsyncApp,
- ) -> Result {
- self.action_log
- .update(cx, |log, cx| log.buffer_read(buffer.clone(), cx));
-
- let (output, edit_events) = Self::parse_edit_chunks(edit_chunks, self.edit_format, cx);
- let mut edit_events = edit_events.peekable();
- while let Some(edit_event) = Pin::new(&mut edit_events).peek().await {
- // Skip events until we're at the start of a new edit.
- let Ok(EditParserEvent::OldTextChunk { .. }) = edit_event else {
- edit_events.next().await.unwrap()?;
- continue;
- };
-
- let snapshot = buffer.read_with(cx, |buffer, _| buffer.snapshot());
-
- // Resolve the old text in the background, updating the agent
- // location as we keep refining which range it corresponds to.
- let (resolve_old_text, mut old_range) =
- Self::resolve_old_text(snapshot.text.clone(), edit_events, cx);
- while let Ok(old_range) = old_range.recv().await {
- if let Some(old_range) = old_range {
- let old_range = snapshot.anchor_before(old_range.start)
- ..snapshot.anchor_before(old_range.end);
- if self.update_agent_location {
- self.project.update(cx, |project, cx| {
- project.set_agent_location(
- Some(AgentLocation {
- buffer: buffer.downgrade(),
- position: old_range.end,
- }),
- cx,
- );
- });
- }
- output_events
- .unbounded_send(EditAgentOutputEvent::ResolvingEditRange(old_range))
- .ok();
- }
- }
-
- let (edit_events_, mut resolved_old_text) = resolve_old_text.await?;
- edit_events = edit_events_;
-
- // If we can't resolve the old text, restart the loop waiting for a
- // new edit (or for the stream to end).
- let resolved_old_text = match resolved_old_text.len() {
- 1 => resolved_old_text.pop().unwrap(),
- 0 => {
- output_events
- .unbounded_send(EditAgentOutputEvent::UnresolvedEditRange)
- .ok();
- continue;
- }
- _ => {
- let ranges = resolved_old_text
- .into_iter()
- .map(|text| {
- let start_line =
- (snapshot.offset_to_point(text.range.start).row + 1) as usize;
- let end_line =
- (snapshot.offset_to_point(text.range.end).row + 1) as usize;
- start_line..end_line
- })
- .collect();
- output_events
- .unbounded_send(EditAgentOutputEvent::AmbiguousEditRange(ranges))
- .ok();
- continue;
- }
- };
-
- // Compute edits in the background and apply them as they become
- // available.
- let (compute_edits, edits) =
- Self::compute_edits(snapshot, resolved_old_text, edit_events, cx);
- let mut edits = edits.ready_chunks(32);
- while let Some(edits) = edits.next().await {
- if edits.is_empty() {
- continue;
- }
-
- // Edit the buffer and report edits to the action log as part of the
- // same effect cycle, otherwise the edit will be reported as if the
- // user made it.
- let (min_edit_start, max_edit_end) = cx.update(|cx| {
- let (min_edit_start, max_edit_end) = buffer.update(cx, |buffer, cx| {
- buffer.edit(edits.iter().cloned(), None, cx);
- let max_edit_end = buffer
- .summaries_for_anchors::(
- edits.iter().map(|(range, _)| range.end),
- )
- .max()
- .unwrap();
- let min_edit_start = buffer
- .summaries_for_anchors::(
- edits.iter().map(|(range, _)| range.start),
- )
- .min()
- .unwrap();
- (
- buffer.anchor_after(min_edit_start),
- buffer.anchor_before(max_edit_end),
- )
- });
- self.action_log
- .update(cx, |log, cx| log.buffer_edited(buffer.clone(), cx));
- if self.update_agent_location {
- self.project.update(cx, |project, cx| {
- project.set_agent_location(
- Some(AgentLocation {
- buffer: buffer.downgrade(),
- position: max_edit_end,
- }),
- cx,
- );
- });
- }
- (min_edit_start, max_edit_end)
- });
- output_events
- .unbounded_send(EditAgentOutputEvent::Edited(min_edit_start..max_edit_end))
- .ok();
- }
-
- edit_events = compute_edits.await?;
- }
-
- output.await
- }
-
- fn parse_edit_chunks(
- chunks: impl 'static + Send + Stream
- >,
- edit_format: EditFormat,
- cx: &mut AsyncApp,
- ) -> (
- Task>,
- UnboundedReceiver>,
- ) {
- let (tx, rx) = mpsc::unbounded();
- let output = cx.background_spawn(async move {
- pin_mut!(chunks);
-
- let mut parser = EditParser::new(edit_format);
- let mut raw_edits = String::new();
- while let Some(chunk) = chunks.next().await {
- match chunk {
- Ok(chunk) => {
- raw_edits.push_str(&chunk);
- for event in parser.push(&chunk) {
- tx.unbounded_send(Ok(event))?;
- }
- }
- Err(error) => {
- tx.unbounded_send(Err(error.into()))?;
- }
- }
- }
- Ok(EditAgentOutput {
- raw_edits,
- parser_metrics: parser.finish(),
- })
- });
- (output, rx)
- }
-
- fn parse_create_file_chunks(
- chunks: impl 'static + Send + Stream
- >,
- cx: &mut AsyncApp,
- ) -> (
- Task>,
- UnboundedReceiver>,
- ) {
- let (tx, rx) = mpsc::unbounded();
- let output = cx.background_spawn(async move {
- pin_mut!(chunks);
-
- let mut parser = CreateFileParser::new();
- let mut raw_edits = String::new();
- while let Some(chunk) = chunks.next().await {
- match chunk {
- Ok(chunk) => {
- raw_edits.push_str(&chunk);
- for event in parser.push(Some(&chunk)) {
- tx.unbounded_send(Ok(event))?;
- }
- }
- Err(error) => {
- tx.unbounded_send(Err(error.into()))?;
- }
- }
- }
- // Send final events with None to indicate completion
- for event in parser.push(None) {
- tx.unbounded_send(Ok(event))?;
- }
- Ok(EditAgentOutput {
- raw_edits,
- parser_metrics: EditParserMetrics::default(),
- })
- });
- (output, rx)
- }
-
- fn resolve_old_text(
- snapshot: TextBufferSnapshot,
- mut edit_events: T,
- cx: &mut AsyncApp,
- ) -> (
- Task)>>,
- watch::Receiver