API платформы
Небольшие неймспейсы, которым не нужна отдельная страница.
sdk.auth
getSession(): Promise<SdkAuthSession | undefined>
Объект текущей сессии пользователя: { id, userId, accessToken, isAuthenticated, isGuest } или undefined, если сессии нет. Оркестраторы используют accessToken для вызова бэкенд-сервисов от имени пользователя.
| Поле | Тип | Описание |
| --- | --- | --- |
| id | string | Id сессии. |
| userId | string | Id вошедшего пользователя. |
| accessToken | string | Токен доступа сессии. |
| isAuthenticated | boolean | Выполнен ли вход. |
| isGuest | boolean | Гостевая ли это сессия. |
sdk.i18n
localize(key: string, defaultValue: string, args?: Record<string, string | number>): string
Ищет ключ в пакете переводов вашего расширения (объявленном в contributes.languages) для текущего языка интерфейса; если ключа нет, возвращает defaultValue.
- Поиск выполняется только по вашим переводам и только в файле
languageCodeкоторого совпадает с текущим языком интерфейса. Запасного варианта на другом языке нет. Языки, объявленные с"target": "core", переводят приложение, а не ваш пакет. - К вложенным объектам в файле переводов обращаются через точку:
{ "files": { "count": "…" } }— это ключfiles.count. - Плейсхолдеры
{name}заменяются значениями изargsи в переводе, и вdefaultValue. Плейсхолдеры без значения остаются без изменений. - Вызов синхронный. Переводы поступают в хост расширений асинхронно и обновляются при смене языка пользователем, поэтому вызывайте
localizeв момент показа текста, а не кешируйте результат при загрузке.
sdk.window.showInfoMessage(sdk.i18n.localize('greeting', 'Привет'))
{ "files": { "count": "{count} archivos" } }
sdk.i18n.localize('files.count', '{count} files', { count: 3 }) // '3 archivos' на испанском, иначе '3 files'
sdk.team
getActive(): Promise<TeamSnapshot | undefined> // { id, displayName }
getCurrentUserRole(): Promise<TeamRole | undefined> // 'owner' | 'developer' | 'member'
sdk.team.panel.left // ExtensionSdkPanelHandle workspace команды
getActive()возвращаетundefined, если активной команды нет.getCurrentUserRole()возвращаетundefined, если активной команды нет, пользователь не вошёл или не состоит в активной команде.sdk.team.panel.leftуправляет левой панелью рабочего пространства команды — те же члены, что у панелей проекта.
sdk.extensions
get(id: ExtensionId): Promise<ExtensionSnapshot | undefined>
getVersionDownloadUrl(versionId: ExtensionVersionId): Promise<string | undefined>
Метод get возвращает снимок расширения, установленного в этом приложении, или undefined, если расширения с таким id нет. Метод getVersionDownloadUrl запрашивает у маркетплейса URL для скачивания версии расширения и возвращает undefined, если запрос не удался.
ExtensionSnapshot:
| Поле | Тип | Описание |
| --- | --- | --- |
| id | ExtensionId | '<publisher>.<name>'. |
| uuid | string | Уникальный идентификатор расширения. |
| displayName | string | Отображаемое имя из манифеста. |
| description | string | Описание из манифеста, '', если его нет. |
| version | string | Установленная версия. |
| versionId | ExtensionVersionId | Идентификатор установленной версии — передайте его в getVersionDownloadUrl. |
| publisher | string | Значение publisher из манифеста. |
| type | 'system' \| 'user' \| 'dev' | Встроено в приложение, установлено пользователем или расширение в разработке. |
| state | 'installed' \| 'activating' \| 'active' \| 'inactive' \| 'disabled' \| 'failed' | Текущее состояние жизненного цикла. |
| location | string | Папка установки в виде нативного пути файловой системы. |
sdk.assets
get(assetId: AssetId): Promise<Asset | undefined>
Asset — зарегистрированное определение ноды или связи. Метод get возвращает любой зарегистрированный asset по id или undefined.
| Поле | Тип | Описание |
| --- | --- | --- |
| id | AssetId | Id asset'а. |
| kind | 'node' \| 'edge' | AssetKind экспортируется только как тип — сравнивайте со строкой. |
| definition | object | Определение ноды или связь из её schema.json. |
| source | { extension: { id, uuid, versionId, version } } | Расширение, добавившее asset. |
| category | string? | Категория, в которой сгруппирован asset. |
| workspace | 'auth' \| 'project' \| 'team' \| 'extensionWorkshop' \| 'home'? | Workspace, которым ограничен asset. |
| visible | boolean? | false, если определение скрывает его из списка assets. |
| location | URI components? | Папка определения. |
| docsUri | URI components? | Файл документации, если он есть у определения. |
location и docsUri приходят как обычные объекты с scheme, authority, path, query и fragment — не экземпляры URI.
Asset
interface UriComponents {
readonly scheme: string
readonly authority: string
readonly path: string
readonly query: string
readonly fragment: string
}
interface Asset {
readonly id: AssetId
readonly kind: 'node' | 'edge' // AssetKind.Node | AssetKind.Edge
readonly definition: object // определение node или edge из schema.json
readonly source: {
readonly extension: { readonly id: ExtensionId; readonly uuid: string; readonly versionId: string; readonly version: string }
}
readonly category?: string
readonly workspace?: 'auth' | 'project' | 'team' | 'extensionWorkshop' | 'home'
readonly visible?: boolean
readonly location?: UriComponents
readonly docsUri?: UriComponents
}
sdk.input
onKeyboard: Event<SdkKeyboardEvent>
События клавиатуры из окна приложения: { type: 'keydown' | 'keyup', code, key, altKey, ctrlKey, metaKey, shiftKey, repeat, timestamp }. Полезно для управления в реальном времени — например, клавиатурная телеоперация робот-ноды.
| Событие | Когда приходит |
| --- | --- |
| keydown | При нажатиях клавиш в окне приложения, до обработки горячих клавиш Fragmenta, — кроме случаев, когда фокус в текстовом поле (input, textarea, редактируемый контент) или в терминале. В редакторе кода приходит только для клавиш, привязанных к горячим клавишам. Нажатия внутри вебвью тоже приходят как keydown, если фокус не в поле формы вебвью. |
| keyup | При каждом отпускании клавиши в окне приложения, в том числе в текстовых полях. Отпускания клавиш внутри вебвью не доставляются. |
code, key, флаги модификаторов и repeat повторяют браузерный KeyboardEvent. timestamp — это KeyboardEvent.timeStamp: миллисекунды с загрузки страницы приложения, а не Unix-время.
SdkKeyboardEvent
interface SdkKeyboardEvent {
readonly type: 'keydown' | 'keyup'
readonly code: string // физическая клавиша, например 'KeyW'
readonly key: string // введённое значение, например 'w'
readonly altKey: boolean
readonly ctrlKey: boolean
readonly metaKey: boolean
readonly shiftKey: boolean
readonly repeat: boolean // клавиша удерживается
readonly timestamp: number // мс с загрузки страницы
}