Перейти к основному содержимому

Контекстные ссылки

Введите @, а затем ссылку, чтобы вставить содержимое прямо в ваше сообщение. VibeOS разворачивает ссылку в строке и добавляет содержимое под разделом --- Attached Context ---.

Поддерживаемые ссылки​

СинтаксисОписание
@file:path/to/file.pyВставить содержимое файла
@file:path/to/file.py:10-25Вставить определённый диапазон строк (нумерация с 1, включительно)
@folder:path/to/dirВставить дерево каталогов с метаданными файлов
@diffВставить git diff (неиндексированные изменения в рабочей директории)
@stagedВставить git diff --staged (проиндексированные изменения)
@git:5Вставить последние N коммитов с патчами (максимум 10)
@url:https://example.comЗагрузить и вставить содержимое веб-страницы

Примеры использования​

Проверь @file:src/main.py и предложи улучшения

Что изменилось? @diff

Сравни @file:old_config.yaml и @file:new_config.yaml

Что в @folder:src/components?

Обобщи эту статью @url:https://arxiv.org/abs/2301.00001

В одном сообщении можно использовать несколько ссылок:

Проверь @file:main.py, а также @file:test.py.

Знаки пунктуации в конце (,, ., ;, !, ?) автоматически удаляются из значений ссылок.

Автодополнение в CLI​

В интерактивном CLI ввод @ запускает автодополнение:

  • @ показывает все типы ссылок (@diff, @staged, @file:, @folder:, @git:, @url:)
  • @file: и @folder: запускают автодополнение путей файловой системы с метаданными о размере файлов
  • Одиночный @ с последующим частичным текстом показывает соответствующие файлы и папки из текущей директории

Диапазоны строк​

Ссылка @file: поддерживает диапазоны строк для точной вставки содержимого:

@file:src/main.py:42        # Одна строка 42
@file:src/main.py:10-25 # Строки с 10 по 25 (включительно)

Нумерация строк начинается с 1. Некорректные диапазоны игнорируются (возвращается полный файл).

Ограничения по размеру​

Контекстные ссылки ограничены, чтобы не перегружать контекстное окно модели:

ПорогЗначениеПоведение
Мягкий лимит25% длины контекстаДобавляется предупреждение, развёртывание продолжается
Жёсткий лимит50% длины контекстаРазвёртывание отклоняется, исходное сообщение возвращается без изменений
Записи в папкеМаксимум 200 файловЛишние записи заменяются на - ...
Git-коммитыМаксимум 10@git:N ограничивается диапазоном [1, 10]

Безопасность​

Блокировка конфиденциальных путей​

Следующие пути всегда блокируются для ссылок @file: во избежание раскрытия учётных данных:

  • SSH-ключи и конфигурация: ~/.ssh/id_rsa, ~/.ssh/id_ed25519, ~/.ssh/authorized_keys, ~/.ssh/config
  • Профили оболочки: ~/.bashrc, ~/.zshrc, ~/.profile, ~/.bash_profile, ~/.zprofile
  • Файлы с учётными данными: ~/.netrc, ~/.pgpass, ~/.npmrc, ~/.pypirc
  • Окружение VibeOS: $VIBEOS_HOME/.env

Эти директории полностью заблокированы (любой файл внутри):

  • ~/.ssh/, ~/.aws/, ~/.gnupg/, ~/.kube/, $VIBEOS_HOME/skills/.hub/

Защита от обхода путей​

Все пути разрешаются относительно рабочей директории. Ссылки, указывающие за пределы разрешённого корневого каталога рабочей области, отклоняются.

Обнаружение бинарных файлов​

Бинарные файлы определяются по MIME-типу и сканированию нулевых байтов. Известные текстовые расширения (.py, .md, .json, .yaml, .toml, .js, .ts и т.д.) обходят обнаружение на основе MIME. Бинарные файлы отклоняются с предупреждением.

Доступность на платформах​

Контекстные ссылки — это в первую очередь функция CLI. Они работают в интерактивном CLI, где @ запускает автодополнение, а ссылки разворачиваются перед отправкой сообщения агенту.

В мессенджерах (Telegram, Discord и т.д.) синтаксис @ не разворачивается шлюзом — сообщения передаются как есть. Сам агент всё ещё может ссылаться на файлы с помощью инструментов read_file, search_files и web_extract.

Взаимодействие со сжатием контекста​

При сжатии контекста разговора развёрнутое содержимое ссылок включается в сводку сжатия. Это означает:

  • Большое содержимое файлов, вставленное через @file:, расходует контекст
  • Если разговор позже сжимается, содержимое файла обобщается (не сохраняется дословно)
  • Для очень больших файлов рекомендуется использовать диапазоны строк (@file:main.py:100-200), чтобы вставлять только нужные разделы

Типовые сценарии​

# Рабочий процесс проверки кода
Проверь @diff и найди проблемы безопасности

# Отладка с контекстом
Этот тест падает. Вот тест @file:tests/test_auth.py
и реализация @file:src/auth.py:50-80

# Изучение проекта
Что делает этот проект? @folder:src @file:README.md

# Исследование
Сравни подходы в @url:https://arxiv.org/abs/2301.00001
и @url:https://arxiv.org/abs/2301.00002

Обработка ошибок​

Некорректные ссылки вызывают встроенные предупреждения, а не сбои:

УсловиеПоведение
Файл не найденПредупреждение: «файл не найден»
Бинарный файлПредупреждение: «бинарные файлы не поддерживаются»
Папка не найденаПредупреждение: «папка не найдена»
Ошибка выполнения gitПредупреждение с stderr от git
URL не возвращает содержимоеПредупреждение: «содержимое не извлечено»
Конфиденциальный путьПредупреждение: «путь является конфиденциальным файлом учётных данных»
Путь вне рабочей областиПредупреждение: «путь находится за пределами разрешённой рабочей области»