> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ss14.art/llms.txt
> Use this file to discover all available pages before exploring further.

# Toolshed и (S)CSI

Toolshed можно свободно вызывать из scsi с помощью функций `object? tsh(string toolshedCommand)`, `T tsh<T>(string toolshedCommand)` и `TOut tsh<TIn, TOut>(TIn value, string toolshedCommand)`. Кроме того, в интерактивном контексте можно вызывать любые функции `IInvocationContext`, такие как `ReadVar`, `WriteVar` и т.д., поскольку контекст реализует `IInvocationContext`.

<Warning>
  Переменные Toolshed в `csi` и `scsi` не являются общими с консолью разработки — это разные контексты.
  Toolshed в C#-скриптинге может вызывать все команды независимо от разрешений, как серверная консоль.
  Возможно, потребуется вручную инициализировать Toolshed на клиенте, вызвав `ToolshedManager.Initialize()`, если вы используете csi.
</Warning>

## Семантика вызова Toolshed

Команды Toolshed автоматически получают предоставленное начальное значение как "переданное через pipe", то есть первая команда должна соответствовать начальному значению. Если начальное значение не предоставлено, его тип — `[none]`, что соответствует обычной семантике консоли разработки. Если значение предоставлено, Toolshed ожидает, что первая команда будет соответствовать сигнатуре `TIn -> ???`, где TIn — это тип предоставленного значения или его downcast.

## Тип выражения Toolshed и реальный тип

Как вы могли догадаться, возвращаемое значение вызова команды toolshed не обязательно является фактическим типом возвращаемого значения; это часто интерфейс или другой высокоуровневый тип, который сам по себе не конструируем. **Нет никаких гарантий относительно базового типа, и не следует делать предположений о нём.**
