---
metadata:
  - name: generator
    content: Diplodoc Platform v5.54.5
alternate:
  - https://sourcecraft.dev/portal/docs/en/code-assistant/operations/agent/shell-integration.md
  - https://sourcecraft.dev/portal/docs/ru/code-assistant/operations/agent/shell-integration.md
  - href: ru/code-assistant/operations/agent/shell-integration.md
    type: text/markdown
    title: Markdown version
  - href: ../../llms.txt
    type: text/markdown
    title: llms.txt
title: Интеграция с терминалом в SourceCraft Code Assistant
description: Как работает интеграция с терминалом в SourceCraft Code Assistant для выполнения команд и обработки их вывода.
---
> **Documentation Index:** Fetch the complete configuration index at https://sourcecraft.dev/portal/docs/ru/llms.txt


# Интеграция с терминалом в SourceCraft Code Assistant

<!-- source: ru/_includes/code-assistant/only-in-vscode.md -->
{% note warning %}

Функциональность доступна только в Visual Studio Code.

{% endnote %}
<!-- endsource: ru/_includes/code-assistant/only-in-vscode.md -->

Интеграция с терминалом — это ключевая функция, которая позволяет Code Assistant выполнять команды в вашем терминале и обрабатывать их вывод. Эта двусторонняя связь между ИИ и вашей средой разработки открывает мощные возможности автоматизации.

Интеграция с терминалом автоматически включена в Code Assistant и напрямую подключается к жизненному циклу выполнения команд в вашем терминале без необходимости настройки. Эта встроенная функция позволяет Code Assistant:
* Выполнять команды от вашего имени через инструмент `execute_command`.
* Читать вывод команд в реальном времени без необходимости копирования и вставки.
* Автоматически обнаруживать и исправлять ошибки в работающих приложениях.
* Отслеживать коды завершения команд для определения успеха или неудачи.
* Отслеживать изменения рабочего каталога по мере навигации по вашему проекту.
* Реагировать на вывод терминала без вмешательства пользователя.
* Останавливать выполняющиеся команды прямо из интерфейса чата с помощью кнопки остановки, которая появляется рядом с сообщением о выполнении команды.

Когда вы просите Code Assistant выполнить такие задачи, как установка зависимостей, запуск сервера разработки или анализ ошибок сборки, интеграция с терминалом работает скрыто, чтобы сделать эти взаимодействия плавными и эффективными.

## Настройка интеграции с терминалом {#configuration}

Code Assistant предоставляет подробную настройку взаимодействия с терминалами. Чтобы получить доступ к этим настройкам:
1. На верхней панели чата нажмите кнопку ![image](../../../_assets/console-icons/gear.svg) **Settings**.
1. На левой панели перейдите в раздел ![image](../../../_assets/console-icons/terminal.svg) **Terminal**.

### Основные настройки {#basic-settings}

#### Terminal output limit {#terminal-output-limit}

Настройка управляет объемом вывода, который Code Assistant захватывает из ваших команд:
* Рассмотрите возможность уменьшения, если вы беспокоитесь о расходе токенов или если Code Assistant кажется медленным при обработке очень длинных выводов. 
* Рассмотрите возможность увеличения, если вам часто требуется больше содержимого из длинных команд, но учитывайте возможные затраты токенов. По умолчанию: 500 строк.

#### Compress progress bar output {#compress-progress-bar-output}

Оставьте опцию включенной (по умолчанию) для более чистого вывода и экономии токенов. Это позволяет Code Assistant обрабатывать динамический вывод, такой как прогресс-бары или спиннеры, показывая только конечное состояние. Отключайте только в случаях, когда вам нужно отладить промежуточный, необработанный вывод прогресс-бара или аналогичного динамического отображения.

### Расширенные настройки {#advanced-settings}

{% note warning %}

Для применения этих настроек требуется перезапуск терминала.

Изменения в расширенных настройках терминала вступают в силу только после перезапуска терминала. Чтобы перезапустить терминал:
1. На панели терминала нажмите ![image](../../../_assets/console-icons/trash-bin.svg).
1. Откройте новое окно терминала с помощью сочетания клавиш **Ctrl** + **Shift** + **`**.

Всегда перезапускайте все открытые окна терминала после изменения любых из этих настроек.

{% endnote %}

#### Inherit environment variables {#inherit-environment-variables}

Эта настройка управляет тем, будут ли терминальные сессии Code Assistant использовать те же переменные окружения (например, `PATH`, API-ключи и т. д.), что и ваша основная среда VS Code.

Она напрямую отражает глобальную настройку VS Code [`terminal.integrated.inheritEnv`](https://code.visualstudio.com/docs/editor/integrated-terminal#_inherit-environment-variables). 

Оставьте эту настройку включенной (по умолчанию для VS Code), если вы хотите, чтобы команды Code Assistant работали в том же контексте и с теми же инструментами, что и ваш обычный терминал VS Code. Рассмотрите возможность отключения только в том случае, если вам нужна полностью чистая, изолированная среда для задач терминала Code Assistant или вы устраняете сложные конфликты переменных окружения.

### Среда выполнения {#runtime-environment}

На macOS (и, возможно, других операционных системах) среда, предоставляемая VS Code, а следовательно, и Code Assistant, может отличаться в зависимости от того, как был запущен VS Code.

Если VS Code запущен из терминала с помощью команды `vscode`, VS Code и Code Assistant унаследуют среду из оболочки, которая их запустила, и все, как правило, будет работать корректно.  

Если VS Code запущен из Finder, Dock или Spotlight, переменные окружения, экспортированные из `.zshrc` или `.zprofile`, скорее всего, будут отсутствовать. Если у вас есть переменные окружения, установленные в одном из этих файлов, и вы обнаружите, что они отсутствуют при запуске VS Code, переместите их в `.zshenv` и выполните выход и повторный вход в систему, чтобы менеджер окон подхватил новые настройки окружения.

#### Disable terminal shell integration {#disable-terminal-shell-integration}

Эта настройка определяет, как Code Assistant выполняет команды терминала.
* Включено — Code Assistant будет выполнять команды, используя встроенный терминал, отображая вывод непосредственно в интерфейсе чата. Этот метод, как правило, надежен, обеспечивает четкий вывод и является предпочтительным способом для большинства пользователей для взаимодействия с командами терминала через Code Assistant. Он гарантирует выполнение команд в согласованной среде, управляемой Code Assistant.

* Выключено — Code Assistant попытается выполнять команды непосредственно в активной панели терминала VS Code. Этот альтернативный метод может быть полезен для специфических случаев, когда вам необходимо, чтобы команды выполнялись в полностью настроенной среде оболочки VS Code, или требовалось взаимодействие с определенными функциями терминала VS Code для выполнения команды. Однако это может быть менее надежным в зависимости от настроек вашей оболочки и версии VS Code.

Следующие настройки являются дополнительными опциями, которые применяются, только если вы выключили опцию **Disable terminal shell integration**:

##### Terminal shell integration timeout {#terminal-shell-integration-timeout}

Если интеграция оболочки включена, но вы все еще видите сообщение `Интеграция оболочки недоступна`, особенно при сложных настройках оболочки, например Zsh с множеством плагинов или в медленной корпоративной среде, ваша оболочка может занимать слишком много времени для инициализации. Увеличьте это значение, чтобы дать вашей оболочке больше времени для сигнала о готовности Code Assistant. Попробуйте увеличивать на 5–10 секунд. Значение по умолчанию — 5 секунд.

##### Terminal command delay {#terminal-command-delay}

Если вывод команды кажется неполным или Code Assistant пропускает конец вывода команды даже при включенной интеграции оболочки, небольшая задержка может помочь. Введите небольшую задержку, например 50 или 100 мс. Это дает терминалу больше времени для вывода всех данных перед тем, как Code Assistant посчитает команду завершенной. Это обходной путь для возможных проблем с синхронизацией в терминале VS Code или определенных оболочках (ошибка VS Code [#237208](https://github.com/microsoft/vscode/issues/237208)). Значение по умолчанию — 0 мс.

##### Enable PowerShell counter workaround {#enable-powershell-counter-workaround}

Специфично для пользователей PowerShell. Включите опцию, если вы обнаружите, что Code Assistant испытывает трудности с выполнением одной и той же команды PowerShell несколько раз подряд, или если захват вывода команд PowerShell ненадежен. Это добавляет уникальный счетчик к командам, чтобы помочь PowerShell различать их.

##### Clear ZSH EOL mark {#clear-zsh-eol-mark}

Специфично для пользователей Zsh. Иногда Zsh добавляет специальный символ (часто `%`) в конце строки, если она не заканчивается новой строкой. Включите опцию, если Code Assistant неправильно интерпретирует или путает вывод команд Zsh, особенно если последняя строка вывода включает неожиданный символ. Code Assistant попытается удалить этот маркер (`PROMPT_EOL_MARK=''`).

##### Enable Oh My Zsh integration {#enable-oh-my-zsh-integration}

Специфично для пользователей популярного фреймворка Oh My Zsh для Zsh. Включите опцию, если вы используете Oh My Zsh и сталкиваетесь с общими проблемами выполнения команд терминала или отображения вывода, которые не решаются другими настройками. Это помогает Code Assistant согласовать работу с механизмами интеграции Oh My Zsh, устанавливая параметр `ITERM_SHELL_INTEGRATION_INSTALLED=Yes`. Может потребоваться перезапуск VS Code.

##### Enable Powerlevel10k integration {#enable-powerlevel10k-integration}

Специфично для пользователей темы Powerlevel10k для Zsh. Включите опцию, если ваш сложный промпт Powerlevel10k мешает Code Assistant правильно определять границы команд, анализировать вывод или отслеживать текущую рабочую директорию. Эта опция устанавливает параметр `POWERLEVEL9K_TERM_SHELL_INTEGRATION=true`.

##### Enable ZDOTDIR handling {#enable-zdotdir-handling}

Дополнительная опция для пользователей Zsh с кастомизированными местоположениями файлов запуска Zsh. Включите опцию, если вы используете `ZDOTDIR` для указания пользовательской директории для конфигурационных файлов Zsh, например `.zshrc`. Эта настройка помогает Code Assistant корректно работать с такими конфигурациями, создавая изолированный временный `ZDOTDIR` для своих собственных скриптов интеграции и предотвращая конфликты с вашей персональной средой Zsh.

## Как работает интеграция оболочки {#how-it-works}

Интеграция оболочки подключает Code Assistant к процессу выполнения команд терминала в реальном времени:
* Когда вы открываете терминал, VS Code устанавливает специальное соединение с вашей оболочкой.
* VS Code отслеживает вашу активность в терминале, определяя:
  * Появление нового приглашения.
  * Ввод команды.
  * Начало выполнения команды.
  * Завершение выполнения команды (и удачное, и с ошибкой).
  * Текущую директорию.
* Каждый тип оболочки (Bash, Zsh, PowerShell, Fish) реализует это немного по-разному, но все они предоставляют Code Assistant одинаковую функциональность.
* Code Assistant может видеть, какие команды выполняются, где они выполняются, сколько времени они занимают, успешны ли они и их полный вывод — без необходимости копировать и вставлять что-либо.

## Устранение неполадок интеграции с терминалом {#troubleshooting}

Интеграция с терминалом встроена в Code Assistant и работает автоматически в большинстве случаев. Если вы видите сообщение `Shell Integration Unavailable` или сталкиваетесь с проблемами выполнения команд, попробуйте следующие решения:
* Обновите VS Code до последней версии. Требуется VS Code версии 1.93 и выше.
* Убедитесь, что выбран совместимый терминал: вызовите **Command palette** (**Ctrl** + **Shift** + **P** или **Cmd** + **Shift** + **P**) → **Terminal: Select Default Profile** → выберите `bash`, `zsh`, `PowerShell` или `fish`.
* Пользователи Windows PowerShell: выполните `Set-ExecutionPolicy RemoteSigned -Scope CurrentUser`, затем перезапустите VS Code.
* Пользователи WSL: добавьте `. "$(code --locate-shell-integration-path bash)"` в ваш `~/.bashrc`.

### Резервный механизм выполнения команд {#fallback-execution-mechanism}

Code Assistant имеет резервный механизм для выполнения команд. Это наиболее актуально, если вы выбрали опцию [`Disable terminal shell integration`](#disable-terminal-shell-integration).

Если Code Assistant настроен на использование интеграции терминала VS Code, но не может подключиться или сталкивается с проблемами, он может автоматически попытаться выполнить команду напрямую, используя фоновый процесс. Это резервное решение, чтобы все же попытаться выполнить команду.

Если используется этот резервный механизм, вы получите сообщение в интерфейсе чата, указывающее, что команда выполняется без полной функциональности либо встроенного терминала Code Assistant, либо интеграции терминала VS Code. Например, в таком случае потоковый вывод в реальном времени или точное определение кода завершения могут быть ограничены.

{% note tip %}

Если вы сталкиваетесь с этим резервным механизмом, это обычно указывает на проблему с настройкой интеграции терминала VS Code. Ознакомьтесь с шагами по устранению неполадок на этой странице или рассмотрите возможность использования встроенного терминала Code Assistant, убедившись, что опция [Disable terminal shell integration](#disable-terminal-shell-integration) включена.

{% endnote %}

### Политика выполнения PowerShell {#powershell-execution-policy}

PowerShell по умолчанию ограничивает выполнение скриптов. Для настройки:
1. Откройте PowerShell от имени администратора.
1. Проверьте текущую политику: `Get-ExecutionPolicy`.
1. Установите подходящую политику: `Set-ExecutionPolicy RemoteSigned -Scope CurrentUser`.

Основные политики:
* `Restricted` — скрипты запрещены (по умолчанию).
* `RemoteSigned` — локальные скрипты можно выполнять; загруженные скрипты должны быть подписаны.
* `Unrestricted` — все скрипты выполняются с предупреждениями.
* `AllSigned` — все скрипты должны быть подписаны.

### Ручная установка интеграции с оболочкой {#manual-installation-of-the-shell-integration}

Если автоматическая интеграция не удалась, добавьте соответствующую строку в конфигурацию вашей оболочки:

{% list tabs %}

- Bash (~/.bashrc)

  ```bash
  [[ "$TERM_PROGRAM" == "vscode" ]] && . "$(code --locate-shell-integration-path bash)"
  ```

- Zsh (~/.zshrc)

  ```bash
  [[ "$TERM_PROGRAM" == "vscode" ]] && . "$(code --locate-shell-integration-path zsh)"
  ```

- PowerShell ($Profile)

  ```powershell
  if ($env:TERM_PROGRAM -eq "vscode") { . "$(code --locate-shell-integration-path pwsh)" }
  ```

- Fish (~/.config/fish/config.fish)

  ```fish
  string match -q "$TERM_PROGRAM" "vscode"; and . (code --locate-shell-integration-path fish)
  ```

{% endlist %}

### Проблемы с настройкой терминала с темой Powerlevel10k {#powerlevel10k-theme-configuration-issues}

Добавьте строку в `~/.zshrc` перед подключением Powerlevel10k:

```text
typeset -g POWERLEVEL9K_TERM_SHELL_INTEGRATION=true
```

Также вы можете включить опцию **Powerlevel10k Integration** в настройках Code Assistant.

### Проверка статуса интеграции с оболочкой {#check-the-status-of-the-shell-integration}

Убедитесь, что интеграция с оболочкой активна, с помощью следующих команд:


{% list tabs %}

- Bash (`~/.bashrc`)

  ```bash
  set | grep -i '[16]33;'
  echo "$PROMPT_COMMAND" | grep vsc
  trap -p DEBUG | grep vsc
  ```

- Zsh (`~/.zshrc`)

  ```zsh
  functions | grep -i vsc
  typeset -p precmd_functions preexec_functions
  ```

- PowerShell (`$Profile`)

  ```powershell
  Get-Command -Name "*VSC*" -CommandType Function
  Get-Content Function:\Prompt | Select-String "VSCode"
  ```

- Fish (`~/.config/fish/config.fish`)

  ```fish
  functions | grep -i vsc
  functions fish_prompt | grep -i vsc
  ```

{% endlist %}

Визуальные индикаторы активной интеграции с оболочкой:
1. Индикатор интеграции оболочки в заголовке терминала.
1. Подсветка обнаружения команд.
1. Обновления рабочего каталога в заголовке терминала.
1. Отчеты о длительности выполнения команд и кодах завершения.

### Методы интеграции терминала WSL

При использовании Windows Subsystem for Linux (WSL) существуют следующие способы использования VS Code с WSL, каждый из которых имеет свои особенности для интеграции с оболочкой:

#### VS Code для Windows с терминалом WSL {#vs-code-for-windows-with-wsl-terminal}

* VS Code работает нативно в Windows.
* Вы используете функцию интеграции терминала WSL в VS Code.
* Команды оболочки выполняются через мост WSL.
* Возможна дополнительная задержка из-за взаимодействия Windows и WSL.
* Маркеры интеграции оболочки могут быть затронуты переходом WSL-Windows: убедитесь, что `source "$(code --locate-shell-integration-path <shell>)"` загружается для вашей оболочки в среде WSL, так как это может не происходить автоматически.

#### VS Code, работающий внутри WSL {#vs-code-running-inside-wsl}

* Вы запускаете VS Code непосредственно из WSL с помощью команды `code .`.
* Сервер VS Code работает нативно в среде Linux.
* Обеспечивается прямой доступ к файловой системе и инструментам Linux.
* Лучшая производительность и надежность интеграции с оболочкой.
* Интеграция с оболочкой загружается автоматически, так как VS Code работает нативно в среде Linux.
* Рекомендуемый подход для разработки с использованием WSL.

Для оптимальной интеграции с оболочкой в WSL мы рекомендуем:
1. Откройте ваш WSL-дистрибутив.
1. Перейдите в каталог вашего проекта.
1. Запустите VS Code с помощью `code .`.
1. Используйте встроенный терминал в VS Code.

### Интеграция с Cygwin (bash, zsh) {#integration-with-cygwin-bash-zsh}

Cygwin предоставляет Unix-подобную среду на системах Windows. Чтобы настроить Cygwin как ваш терминал в VS Code:

1. Установите Cygwin с [https://www.cygwin.com/](https://www.cygwin.com/).
1. Откройте настройки VS Code:
   1. Выберите **File** → **Preferences** → **Settings**.
   1. В правом верхнем углу нажмите **Open Settings (JSON)**.
1. Добавьте в `settings.json` внутри верхнего уровня фигурных скобок `{}` следующую конфигурацию:

    ```json
    {
      "terminal.integrated.profiles.windows": {
        "Cygwin": {
          "path": "C:\\cygwin64\\bin\\bash.exe",
          "args": ["--login"],
          "env": {"CHERE_INVOKING": "1"}
        }
      },
      "terminal.integrated.defaultProfile.windows": "Cygwin"
    }
    ```

    Где:
    * `path` — указывает на исполняемый файл Bash в вашей установке Cygwin.
    * `args` — флаг `--login` гарантирует, что оболочка читает файлы профиля.
    * `env` — переменная окружения `CHERE_INVOKING` указывает Cygwin использовать текущий каталог в качестве рабочего.
    * `terminal.integrated.defaultProfile.windows` — устанавливает Cygwin как профиль терминала по умолчанию.

    {% note info %}

    Если у вас установлена 32-битная версия Cygwin, используйте `"C:\\cygwin\\bin\\bash.exe"` для пути.

    {% endnote %}

1. Чтобы открыть новый терминал Cygwin, нажмите **Ctrl** + **Shift** + **`**. Также вы можете нажать **F1**, ввести `Terminal: Create New Terminal (with Profile)` и выбрать **Cygwin**.

Если вы столкнулись с проблемами интеграции оболочки с Cygwin, убедитесь, что вы добавили соответствующие хуки интеграции оболочки в ваш профиль bash Cygwin.

### Ресурсы для устранения неполадок {#troubleshooting-resources}

При возникновении проблем с интеграцией оболочки проверьте журналы отладки:
1. Откройте **Help** → **Toggle Developer Tools** → **Console**.
1. Чтобы увидеть все сообщения журнала, выберите **Show All Levels**.
1. Ищите сообщения, содержащие текст `[Terminal Process]`.