Skip to content
Back to skills

Code Search

ASecurity

Поиск и исследование BSL-кода и точек входа 1С. Используй когда нужно найти реализацию, вызовы, обработчики, модули, поток выполнения или быстро разобраться в механизме конфигурации.

  • 213 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added June 11, 2026
toolsnode

Works with

  • cursor
  • cli
  • mcp

Security analysis

A100/100

Scanned September 25, 2026

npx -y skills add IngvarConsulting/unica --skill code-search --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Code Search?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Code Search
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/ingvarconsulting-code-search/badge)](https://www.skillsdirectory.com/skills/ingvarconsulting-code-search)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: code-search
description: "Поиск и исследование BSL-кода и точек входа 1С. Используй когда нужно найти реализацию, вызовы, обработчики, модули, поток выполнения или быстро разобраться в механизме конфигурации."
---

# Code Search

## MCP routing

- Preferred path: use MCP `unica` tools `unica.search`, `unica.view`, and and.
  `unica.check`.
- Не зови индекс кода, анализатор или пакетные адаптеры напрямую: они спрятаны
  за MCP `unica`.
- Имя набора исходников — не константа. Его называет `unica.view {}`;
  `"main"` в примерах ниже иллюстрация, а не умолчание. В адресе имя стоит до
  двоеточия: `main:Document.Заказ`.

## Tool choice

- MCP-first discipline: держись публичных `unica.*` до того, как спускаться к
  оболочке. К поиску по файлам переходи, только когда вызовы выше не закрыли
  пробел, и сообщай what was tried, если это важно для ответа.
- **Что искать** выбирает свод. `unica.search` с `corpus: "text"` (умолчание)
  ищет по тексту модулей BSL и отвечает `scope`, `line`, `column`, `snippet`.
  С `corpus: "names"` ищет по именам и синонимам метаданных и отвечает `at`,
  `kind`, `title`. Физического пути нет ни у одного свода — работа идёт
  адресами.
- **Чем искать** выбирает `role` в текстовом своде: `lexical` совпадает
  буквально, `symbol` идёт по индексу символов, `semantic` — по смыслу. Без
  `role` Unica ищет литерал сама и провайдеров не поднимает.
- `scope` сужает поиск до одного логического поддерева. У локального поиска
  по тексту и именам `limit` задаёт размер страницы (по умолчанию 20,
  максимум 50). Пока есть `cursor`, продолжай с теми же аргументами поиска.
  `page.stoppedBy: "complete"` означает конец полученного потока. Если прочитанный
  ответ изменился, курсор отвечает `stale_cursor`; начни поиск заново. Роли
  провайдеров дают страницы только внутри полученного окна: если секция
  сообщает `limitReached`, последняя страница не доказывает полноту поиска.
  При 200 полученных совпадениях попроси пользователя уточнить искомое, прежде
  чем искать снова; `scope` предлагай только для `lexical`, поскольку `symbol`
  и `semantic` пока не поддерживают ограничение логическим поддеревом.
  Меньшие пределы `bsl-analyzer` и RLM сохраняй как неполный результат, не
  называя запрос слишком широким только по этому признаку.
- Признак `approximate` у попадания по имени означает совпадение по близости,
  а не точное. Проверяй `sourceCoverage`: при `complete: false` часть
  дескрипторов не прочитана, `omitted` и `details` называют число и причину
  пропусков. Даже пустая выдача тогда не доказывает отсутствия объекта.
- **Читать узел** — `unica.view {at}`. У владельца есть ветвь `Module`, у
  модуля — `Method`, у метода — подпись, контекст компиляции, собственные
  строки и ветвь `Body` парами `{line, text}`. Это дешевле, чем читать модуль
  целиком, и точнее, чем догадываться по совпадению.
- Профиль объекта метаданных — тот же `unica.view {at}`: состав, модули, права,
  подписки и функциональные опции лежат в его `props` и ветвях.
- Путь к файлу нужен только когда он пришёл снаружи — из диффа, лога сборки
  или трассы. Тогда его переводит в адрес аварийный `unica.resolve`. В обычном
  ходе работы он не нужен.

### Чего на канонической поверхности пока нет

- **граф вызовов и impact analysis** — ветвей `Caller`/`Callee` у узла метода
  ещё нет. Пока доказательством потока служит `unica.search` с
  `role: "symbol"` по имени метода, и это доказательство неполное: скажи об
  этом, а не выдавай его за полный обход вызовов.

## Workflow

1. Разметь пространство: `unica.view {}` называет наборы исходников и их
   формат, когда набор или формат неясен.
2. Найди предмет по имени: `unica.search {corpus: "names"}` с необязательным
   `kind`. Точное имя объекта закрывает вопрос быстрее любого текстового
   поиска.
3. Прочти узел: `unica.view {at}`. Ветвь `Module` ведёт к модулям владельца,
   ветвь `Method` — к его методам; узел метода даёт подпись и строки.
4. Ищи по тексту то, что именем не находится: фрагменты запросов, строковые
   литералы, заголовки, нестандартные токены. `role` выбирай под вопрос.
5. Расширяй только после неудачи точного поиска: синонимы, деловые термины,
   префиксы общих модулей, заголовки команд форм.
6. К локальному `rg` спускайся только за файлами вне индекса Unica или когда
   попытки выше не закрыли пробел — и скажи, что было испробовано.
7. Разделяй объявление, вызов, обработчик и мёртвое совпадение. Поток по
   одному попаданию не выводится.
8. Отчитывайся логическими адресами и строками внутри узла, а не путями к
   файлам; приводи запрос, которым получено важное попадание.

## Common searches

- Object lifecycle: `ОбработкаПроведения`, `ПередЗаписью`, `ПриЗаписи`, `ПриСозданииНаСервере`.
- Managed form flow: command handler, server procedure, client wrapper, form attribute name.
- Integrations: HTTP service root URL, method name, header name, endpoint path, exchange plan node.
- BSP entry points: exported common-module procedure plus surrounding callers.

## MCP examples

```jsonc
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "unica.view",
    "arguments": {}
  }
}
```

Объект по имени:

```json
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "unica.search",
    "arguments": {
      "query": "Заказ",
      "corpus": "names",
      "kind": "Document",
      "limit": 20
    }
  }
}
```

Текст внутри поддерева:

```json
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "unica.search",
    "arguments": {
      "query": "ОбработкаПроведения",
      "scope": "main:Configuration",
      "limit": 20
    }
  }
}
```

Символ по индексу — ближайшее, чем сегодня заменяется граф вызовов:

```json
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "unica.search",
    "arguments": {
      "query": "ОбработкаПроведения",
      "role": "symbol",
      "limit": 25
    }
  }
}
```

Профиль объекта метаданных:

```json
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "unica.view",
    "arguments": { "at": "main:Document.Заказ" }
  }
}
```

Метод целиком: подпись в узле, текст в ветви `Body`:

```json
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "unica.view",
    "arguments": { "at": "main:CommonModule.Продажи.Method.ОбработкаПроведения" }
  }
}
```

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.