@rsconcept/rstool 0.9.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -32,68 +32,76 @@
32
32
 
33
33
  - Диапазоны: `0x84xx` — parser (синтаксис, скобки), `0x88xx` — semantic (типизация, область
34
34
  видимости, структура, схема, отсутствие значения), `0x81xx` — evaluation (вычисление КМ),
35
- `0x28xx` — предупреждения (класс UNKNOWN, префикс `U`).
36
-
37
- ## Parser (`0x84xx`, префикс `P`)
38
-
39
- | Код | Имя | `params` | Исправление |
40
- | :------- | :-------------------- | :------------------- | :------------------------------------------------------------------------------- |
41
- | `0x8400` | `unknownSyntax` | — | Неопределённая синтаксическая ошибка: проверь операторы, скобки, идентификаторы. |
42
- | `0x8409` | `bracketMismatch` | `[expected, actual]` | Закрой ожидаемой скобкой `expected` вместо `actual`. |
43
- | `0x840A` | `doubleParenthesis` | — | Убери лишнюю внешнюю пару `(( … ))`. |
44
- | `0x840B` | `missingOpenBracket` | `[bracket]` | Непарная закрывающая `bracket`: убери её или добавь открывающую. |
45
- | `0x840C` | `missingCloseBracket` | `[bracket]` | Непарная открывающая `bracket`: убери её или добавь закрывающую. |
46
- | `0x8415` | `expectedLocal` | — | Ожидалось имя локальной переменной. |
47
- | `0x8416` | `expectedType` | — | Тип выражения не соответствует `cstType` конституенты. |
48
- | `0x8417` | `invalidFilterSyntax` | — | Синтаксис `Fi`: `Fi1[D1](S1)`, `Fi1,2[D1,D2](S1)` или `Fi1,2[D3](S1)`. |
49
-
50
- ## Предупреждения (`0x28xx`, префикс `U`, не блокируют)
35
+ - `0x2xxx` — предупреждения (не блокируют, `isCritical` возвращает `false`).
36
+
37
+ ## Parser
38
+
39
+ | Код | Имя | `params` | Исправление |
40
+ | :------- | :----------------------- | :------------------------ | :------------------------------------------------------------------------------- |
41
+ | `0x8400` | `unknownSyntax` | — | Неопределённая синтаксическая ошибка: проверь операторы, скобки, идентификаторы. |
42
+ | `0x8409` | `bracketMismatch` | `[expected, actual]` | Закрой ожидаемой скобкой `expected` вместо `actual`. |
43
+ | `0x840A` | `doubleParenthesis` | — | Убери лишнюю внешнюю пару `(( … ))`. |
44
+ | `0x840B` | `missingOpenBracket` | `[bracket]` | Непарная закрывающая `bracket`: убери её или добавь открывающую. |
45
+ | `0x840C` | `missingCloseBracket` | `[bracket]` | Непарная открывающая `bracket`: убери её или добавь закрывающую. |
46
+ | `0x8415` | `expectedLocal` | — | Ожидалось имя локальной переменной. |
47
+ | `0x8416` | `expectedType` | `[expectedClass, actual]` | Несоответствие класса выражения ожидаемому. |
48
+ | `0x8417` | `invalidFilterSyntax` | — | Синтаксис `Fi`: `Fi1[D1](S1)`, `Fi1,2[D1,D2](S1)` или `Fi1,2[D3](S1)`. |
49
+ | `0x8418` | `expectedFunctionBody` | — | Нужно тело функции после `[параметры]`. |
50
+ | `0x8419` | `expectedExpressionBody` | — | Нужно теоретико-множественное тело функции (ТФ). |
51
+ | `0x841A` | `expectedLogicBody` | — | Нужно логическое тело функции. |
52
+
53
+ ## Предупреждения
51
54
 
52
55
  | Код | Имя | `params` | Исправление |
53
56
  | :------- | :------------------- | :------- | :--------------------------------------------------------------------- |
54
57
  | `0x2801` | `localDoubleDeclare` | `[name]` | Объявление `name` задублировано — можно игнорировать или убрать дубль. |
55
58
  | `0x2802` | `localNotUsed` | `[name]` | Переменная `name` не используется. |
56
59
 
57
- ## Локальные переменные и область видимости (`0x88xx`, префикс `S`)
58
-
59
- | Код | Имя | `params` | Исправление |
60
- | :------- | :---------------- | :------- | :--------------------------------------------------------- |
61
- | `0x8801` | `localUndeclared` | `[name]` | Свяжи `name` квантором или объяви параметром. |
62
- | `0x8802` | `localShadowing` | `[name]` | Переименуй внутреннюю переменную `name`. |
63
- | `0x8815` | `localOutOfScope` | `[name]` | Перенеси использование `name` внутрь её области видимости. |
64
-
65
- ## Типизация и структура (`0x88xx`, префикс `S`)
66
-
67
- | Код | Имя | `params` | Исправление |
68
- | :------- | :------------------------------ | :------------------- | :--------------------------------------------------------------------------------------------------------------------------- |
69
- | `0x8803` | `typesNotEqual` | `[a, b, operator]` | Операнды `operator` должны иметь равный тип (`a` ≠ `b`). |
70
- | `0x8825` | `typesNotCompatible` | `[a, b, operator]` | Типы `a` и `b` несовместимы для `operator`. |
71
- | `0x8804` | `globalNotTyped` | `[name]` | Поставщик `name` не типизирован: добавь и проанализируй его раньше. |
72
- | `0x8805` | `invalidDecart` | `[arg]` | Аргумент `arg` оператора `×` неподходящей ступени. |
73
- | `0x8806` | `invalidBoolean` | `[arg]` | Аргумент `arg` оператора `ℬ()` неподходящей ступени. |
74
- | `0x8810` | `invalidReduce` | `[arg]` | `red(arg)` требует ступень `ℬℬ`. |
75
- | `0x8807` | `invalidTypeOperation` | `[operator, type]` | Аргумент `type` оператора `operator` (`∪`, `∈`, `D{}`, `:∈` и т.п.) должен быть множеством. |
76
- | `0x8808` | `invalidCard` | `[arg]` | `card(arg)` только над множеством. |
77
- | `0x8809` | `invalidDebool` | `[arg]` | `debool(arg)` требует ступень-множество с гарантией синглетона. |
78
- | `0x880B` | `globalFuncWithoutArgs` | `[name]` | Терм-/предикат-функция `name` вызвана без аргументов: нужен `F#[…]` / `P#[…]`. |
79
- | `0x8811` | `invalidProjectionTuple` | `[from, to]` | Проекция `Pr` только над кортежем. |
80
- | `0x8812` | `invalidProjectionSet` | `[projection, type]` | Неверная проекция `projection` над типом `type`. |
81
- | `0x8813` | `invalidEnumeration` | `[a, b]` | Элементы перечисления разной типизации (`a` `b`). |
82
- | `0x8814` | `invalidCortegeDeclare` | | Число переменных кортежа размерности `×` (напр. `∀(a,b)∈X1`). |
83
- | `0x8816` | `invalidElementPredicate` | `[a, operator, c]` | `a operator c` (`ξ∈S`) с несовместимыми ступенями: `a` тип элемента, `c` — тип множества. |
84
- | `0x8817` | `invalidEmptySetUsage` | | Бессмысленное использование `∅` (напр. `X1∪∅`). |
85
- | `0x8818` | `invalidArgsArity` | `[expected, actual]` | Неверное число аргументов функции (`expected` `actual`). |
86
- | `0x8819` | `invalidArgumentType` | `[expected, actual]` | Тип аргумента не соответствует объявлению: ожидалось `expected`, получено `actual`. |
87
- | `0x881C` | `globalStructure` | — | Некорректный домен родовой структуры (`cstType` STRUCTURED): нужна ступень-структура вроде `ℬ(X1×D2)`, а не, напр., `X1∩X1`. |
88
- | `0x8821` | `radicalUsage` | `[name]` | Радикал `name` допустим только внутри аргумента функции. |
89
- | `0x8824` | `arithmeticNotSupported` | `[type, operator]` | `type` не поддерживает арифметику `operator`: нужна ступень `Z` или `C#`. |
90
- | `0x8826` | `orderingNotSupported` | `[type, operator]` | `type` не поддерживает порядок `operator`: нужна ступень `Z` или `C#`. |
91
- | `0x8827` | `expectedLogic` | `[type]` | Нужна логическая формула, получен тип `type`. |
92
- | `0x8828` | `expectedSetexpr` | `[type]` | Нужно теоретико-множественное выражение, получен тип `type` (напр. `Logic`). |
93
- | `0x8829` | `invalidArgumentCortegeDeclare` | | Связное объявление кортежа запрещено в аргументах функции (`[(a,b)∈S1]`): используй проекции или раздельные переменные. |
94
- | `0x882A` | `invalidQuantifierDomain` | `[operator, type]` | Область квантора `operator` (`∀`/`∃`) должна быть множеством, а не `type`. |
95
-
96
- ## Фильтр `Fi` (`0x882x`, префикс `S`)
60
+ ## Локальные переменные и область видимости
61
+
62
+ | Код | Имя | `params` | Исправление |
63
+ | :------- | :--------------------------- | :--------------- | :-------------------------------------------------------------------------------------------- |
64
+ | `0x8801` | `localUndeclared` | `[name]` | Свяжи `name` квантором или объяви параметром. |
65
+ | `0x8802` | `localShadowing` | `[name]` | Переименуй внутреннюю переменную `name`. |
66
+ | `0x8815` | `localOutOfScope` | `[name]` | Перенеси использование `name` внутрь её области видимости. |
67
+ | `0x882E` | `localOutOfScopeParentheses` | `[name]` | Переменная `name` вне области квантора: возьми тело квантора в скобки (напр. `∀a∈S (… & …)`). |
68
+ | `0x882F` | `localUndeclaredInSubexpr` | `[name, domain]` | В подвыражении нет квантора для `name`; ожидается `∀(∃) name∈domain`. |
69
+
70
+ ## Типизация и структура
71
+
72
+ | Код | Имя | `params` | Исправление |
73
+ | :------- | :--------------------------------- | :--------------------------------- | :--------------------------------------------------------------------------------------------------------------------------- |
74
+ | `0x8803` | `typesNotEqual` | `[a, b, operator]` | Операнды `operator` должны иметь равный тип (`a` `b`). |
75
+ | `0x8825` | `typesNotCompatible` | `[a, b, operator]` | Типы `a` и `b` несовместимы для `operator`. |
76
+ | `0x8804` | `globalNotTyped` | `[name]` | Поставщик `name` не типизирован: добавь и проанализируй его раньше. |
77
+ | `0x8805` | `invalidDecart` | `[arg]` | Аргумент `arg` оператора `×` неподходящей ступени. |
78
+ | `0x8806` | `invalidBoolean` | `[arg]` | Аргумент `arg` оператора `ℬ()` неподходящей ступени. |
79
+ | `0x8810` | `invalidReduce` | `[arg]` | `red(arg)` требует ступень `ℬℬ`. |
80
+ | `0x8807` | `invalidTypeOperation` | `[operator, type]` | Аргумент `type` оператора `operator` (`∪`, `∈`, `D{}`, `:∈` и т.п.) должен быть множеством. |
81
+ | `0x8808` | `invalidCard` | `[arg]` | `card(arg)` только над множеством. |
82
+ | `0x8809` | `invalidDebool` | `[arg]` | `debool(arg)` требует ступень-множество с гарантией синглетона. |
83
+ | `0x880B` | `globalFuncWithoutArgs` | `[name]` | Терм-/предикат-функция `name` вызвана без аргументов: нужен `F#[…]` / `P#[…]`. |
84
+ | `0x8830` | `projectionSetArgumentNotSet` | `[operator, actual]` | `Pr*` применяется к множеству; аргумент не типизирован как `ℬ(H)`. |
85
+ | `0x8831` | `projectionSetArgumentNotTupleSet` | `[operator, actual]` | `Pr*` требует множество кортежей `ℬ(H1×…×Hn)`; аргумент — множество не-кортежей, напр. `ℬ(X1)`. |
86
+ | `0x8832` | `projectionSetIndexOutOfRange` | `[operator, index, arity, actual]` | Индекс проекции `index` превышает размерность `arity` кортежа аргумента `actual`. |
87
+ | `0x8833` | `projectionTupleArgumentNotTuple` | `[operator, actual]` | `pr*` применяется к кортежу `H1×…×Hn`; получен другой тип. |
88
+ | `0x8834` | `projectionTupleIndexOutOfRange` | `[operator, index, arity, actual]` | Индекс `index` превышает размерность `arity` кортежа `actual`. |
89
+ | `0x8813` | `invalidEnumeration` | `[a, b]` | Элементы перечисления разной типизации (`a` `b`). |
90
+ | `0x8814` | `invalidCortegeDeclare` | — | Число переменных кортежа размерности `×` (напр. `∀(a,b)∈X1`). |
91
+ | `0x8816` | `invalidElementPredicate` | `[a, operator, c]` | `a operator c` (`ξ∈S`) с несовместимыми ступенями: `a` — тип элемента, `c` — тип множества. |
92
+ | `0x8817` | `invalidEmptySetUsage` | | Бессмысленное использование `∅` (напр. `X1∪∅`). |
93
+ | `0x8818` | `invalidArgsArity` | `[expected, actual]` | Неверное число аргументов функции (`expected` `actual`). |
94
+ | `0x8819` | `invalidArgumentType` | `[expected, actual]` | Тип аргумента не соответствует объявлению: ожидалось `expected`, получено `actual`. |
95
+ | `0x881C` | `globalStructure` | | Некорректный домен родовой структуры (`cstType` STRUCTURED): нужна ступень-структура вроде `ℬ(X1×D2)`, а не, напр., `X1∩X1`. |
96
+ | `0x8821` | `radicalUsage` | `[name]` | Радикал `name` допустим только внутри аргумента функции. |
97
+ | `0x8824` | `arithmeticNotSupported` | `[type, operator]` | `type` не поддерживает арифметику `operator`: нужна ступень `Z` или `C#`. |
98
+ | `0x8826` | `orderingNotSupported` | `[type, operator]` | `type` не поддерживает порядок `operator`: нужна ступень `Z` или `C#`. |
99
+ | `0x8827` | `expectedLogic` | `[type]` | Нужна логическая формула, получен тип `type`. |
100
+ | `0x8828` | `expectedSetexpr` | `[type]` | Нужно теоретико-множественное выражение, получен тип `type` (напр. `Logic`). |
101
+ | `0x8829` | `invalidArgumentCortegeDeclare` | — | Связное объявление кортежа запрещено в аргументах функции (`[(a,b)∈S1]`): используй проекции или раздельные переменные. |
102
+ | `0x882A` | `invalidQuantifierDomain` | `[operator, type]` | Область квантора `operator` (`∀`/`∃`) должна быть множеством, а не `type`. |
103
+
104
+ ## Фильтр `Fi`
97
105
 
98
106
  | Код | Имя | `params` | Исправление |
99
107
  | :------- | :---------------------------- | :----------------------------------- | :------------------------------------------------------------------------------------ |
@@ -103,16 +111,16 @@
103
111
  | `0x882C` | `invalidFilterIndex` | `[operator, actual, index, arity]` | Индекс проекции `index` превышает арность кортежа `arity` аргумента `actual`. |
104
112
  | `0x882D` | `invalidFilterBooleanEchelon` | `[operator, actual, expected]` | У параметра `Fi` недостаёт ступени ℬ: тип `actual`, `bool(actual)` дал бы `expected`. |
105
113
 
106
- ## Значение и схема (`0x88xx`, префикс `S`)
114
+ ## Значение и схема
107
115
 
108
- | Код | Имя | `params` | Исправление |
109
- | :------- | :--------------------- | :------- | :----------------------------------------------------------- |
110
- | `0x8840` | `globalNoValue` | `[name]` | Идентификатор `name` невычислим в модели. |
111
- | `0x8841` | `invalidPropertyUsage` | — | `Property` - множество использовано как вычислимое значение. |
112
- | `0x8861` | `cstEmptyDerived` | — | У выводимой конституенты пустая формула. |
113
- | `0x8862` | `definitionNotAllowed` | | У `basic`/`constant` определение не допускается. |
116
+ | Код | Имя | `params` | Исправление |
117
+ | :------- | :--------------------- | :----------------- | :-------------------------------------------------------------------------------------------------------- |
118
+ | `0x8840` | `globalNoValue` | `[name]` | Идентификатор `name` невычислим в модели. |
119
+ | `0x8841` | `invalidPropertyUsage` | — | `Property` - множество использовано как вычислимое значение. |
120
+ | `0x8861` | `cstEmptyDerived` | — | У выводимой конституенты пустая формула. |
121
+ | `0x8862` | `definitionNotAllowed` | `[cstType, alias]` | У `basic`/`constant` формула должна быть пустой; `cstType` — роль конституенты, `alias` — её обозначение. |
114
122
 
115
- ## Вычисление КМ (`0x81xx`, префикс `E`)
123
+ ## Вычисление КМ
116
124
 
117
125
  | Код | Имя | `params` | Исправление |
118
126
  | :------- | :------------------------ | :----------------- | :--------------------------------------------------------------------- |
@@ -14,6 +14,9 @@
14
14
  - `/rsforms/:id` в UI → `GET /api/rsforms/:id` для метаданных.
15
15
  - Полная КС → `GET /api/rsforms/:id/details`.
16
16
  - Версия КС → `GET /api/library/:id/versions/:version`.
17
+ - Список доступных объектов → `GET /api/library/active`.
18
+ - Поиск по тексту в схемах/ОСС/моделях → `GET /api/library/context-search?q=...`.
19
+ - Метаданные объектов по id → `GET /api/library/by-ids?ids=856,1203`.
17
20
  - ОСС → `GET /api/oss/:id` и соседние routes viewset.
18
21
  - Модель → `GET /api/models/:id`.
19
22
  - OpenAPI JSON → `GET https://api.portal.acconcept.ru/schema`.
@@ -32,6 +35,144 @@ GET https://api.portal.acconcept.ru/api/rsforms/856/details
32
35
  - `access_policy: "public"` читается без авторизации.
33
36
  - Приватная схема или модель вернёт `403` и не предназначена для агентов.
34
37
  - Если нужны только `title`, `alias`, `description`, `owner`, `access_policy`, не запрашивай `/details`.
38
+ - Авторизация Portal — session cookie (`SessionAuthentication`). Для curl с приватными объектами
39
+ пользователя передай cookie сессии (`-b "sessionid=..."`) после логина в UI или через тот же
40
+ механизм, что использует фронтенд. Без cookie видны только публичные объекты в `/S` и `/L`.
41
+
42
+ ## Список и контекстный поиск в библиотеке
43
+
44
+ Чтобы найти схему по термину, формуле или названию, не перебирай все id подряд.
45
+ Бэкенд и UI используют контекстный поиск по вложенным текстовым полям.
46
+
47
+ ### Полный список доступных объектов
48
+
49
+ ```text
50
+ GET /api/library/active
51
+ ```
52
+
53
+ Возвращает массив метаданных (`id`, `item_type`, `title`, `alias`, `description`, `location`,
54
+ `access_policy`, `visible`, …) для объектов, доступных текущему пользователю: публичные в `/S` и
55
+ `/L`, собственные и те, где пользователь редактор. Анониму — только публичные в общих разделах.
56
+
57
+ Для агентов обычно достаточно `context-search`; полный `active` нужен, если требуется обойти
58
+ все объекты без текстового фильтра.
59
+
60
+ ### Контекстный поиск
61
+
62
+ ```text
63
+ GET /api/library/context-search?q=<текст>&search_fields=<поля>&location=<путь>&subfolders=0|1&item_type=<тип>&admin=0|1
64
+ ```
65
+
66
+ Ответ: `{ "ids": [856, 1203, ...] }` — id объектов библиотеки (КС, ОСС, RSModel), у которых
67
+ совпал хотя бы один из запрошенных текстовых фрагментов. Пустой или пробельный `q` → `ids: []`.
68
+ Регистр не важен; кириллица поддерживается.
69
+
70
+ | Параметр | Обязателен | Описание |
71
+ | --------------- | ---------- | ------------------------------------------------------- |
72
+ | `q` | да\* | Подстрока для поиска (\*пустой → пустой ответ) |
73
+ | `search_fields` | нет | Список полей через запятую; по умолчанию — все |
74
+ | `location` | нет | Путь папки (`/S`, `/U/Проект`, …); см. ниже |
75
+ | `subfolders` | нет | `1`/`true` — включать вложенные папки; по умолчанию `0` |
76
+ | `item_type` | нет | `rsform`, `oss` или `rsmodel` — ограничить тип объекта |
77
+ | `admin` | нет | `1`/`true` — искать по всей библиотеке (только staff) |
78
+
79
+ Допустимые значения `search_fields`:
80
+
81
+ | Поле | Где ищет |
82
+ | ------------------- | ------------------------------------------------- |
83
+ | `alias` | Шифр объекта и конституент |
84
+ | `title` | Название объекта |
85
+ | `description` | Описание объекта |
86
+ | `term` | Термин конституенты (`term_raw`, `term_resolved`) |
87
+ | `definition_formal` | Формальное определение, ручная типизация |
88
+ | `definition_text` | Текстовое определение конституенты |
89
+ | `convention` | Соглашение конституенты |
90
+ | `operation` | Операции ОСС (alias, title, description) |
91
+ | `block` | Блоки ОСС (title, description) |
92
+
93
+ Для КС по термину или формуле обычно не указывай `search_fields` (все поля) или явно:
94
+ `search_fields=term,definition_formal,title`.
95
+
96
+ ### Префиксы `location`
97
+
98
+ Путь хранится в поле `location` каждого объекта. Корневые префиксы:
99
+
100
+ | Префикс | Значение |
101
+ | ------- | -------------------------------------------- |
102
+ | `/S` | Общие (COMMON), публичные схемы для анонимов |
103
+ | `/L` | Библиотека (LIBRARY), staff |
104
+ | `/U` | Личное пространство пользователя |
105
+ | `/P` | Проекты |
106
+
107
+ Вложенные папки: `/U/Мой проект/Подпапка`.
108
+
109
+ - без `subfolders` (по умолчанию) — только объекты с точным совпадением `location`;
110
+ - с `subfolders=1` — объекты в папке и во всех вложенных (`/U/Проект`, `/U/Проект/Подпапка`, …).
111
+
112
+ Параметр `item_type` сужает поиск до КС (`rsform`), ОСС (`oss`) или моделей (`rsmodel`).
113
+ Для поиска только концептуальных схем удобно: `item_type=rsform`.
114
+
115
+ ### Метаданные по списку id
116
+
117
+ После `context-search` не нужно запрашивать всю библиотеку (`/active`) или каждый объект отдельно.
118
+
119
+ ```text
120
+ GET /api/library/by-ids?ids=<id1>,<id2>,...
121
+ ```
122
+
123
+ Ответ — массив метаданных в том же формате, что и `GET /api/library/active`:
124
+ `id`, `item_type`, `title`, `alias`, `description`, `location`, `access_policy`, `visible`, …
125
+
126
+ | Параметр | Описание |
127
+ | -------- | ----------------------- |
128
+ | `ids` | Список id через запятую |
129
+
130
+ Правила доступа те же, что у `context-search` и `active`: недоступные id **пропускаются**
131
+ (не ошибка, не `403` на весь запрос). Порядок элементов в ответе совпадает с порядком id
132
+ в запросе. Пустой `ids` → `[]`.
133
+
134
+ Для одной КС по-прежнему можно `GET /api/rsforms/:id`; для нескольких результатов поиска
135
+ удобнее `by-ids`, затем `GET /api/rsforms/:id/details` только для выбранных КС.
136
+
137
+ ### Примеры curl
138
+
139
+ Публичный поиск по термину (без авторизации):
140
+
141
+ ```bash
142
+ curl.exe -s "https://api.portal.acconcept.ru/api/library/context-search?q=множество"
143
+ ```
144
+
145
+ Только в названиях и шифрах:
146
+
147
+ ```bash
148
+ curl.exe -s "https://api.portal.acconcept.ru/api/library/context-search?q=логика&search_fields=title,alias"
149
+ ```
150
+
151
+ С сессией пользователя (приватные и личные объекты):
152
+
153
+ ```bash
154
+ curl.exe -s -b "sessionid=ВАШ_SESSION_ID" ^
155
+ "https://api.portal.acconcept.ru/api/library/context-search?q=UniqueTermToken"
156
+ ```
157
+
158
+ Только КС в общем разделе и подпапках:
159
+
160
+ ```bash
161
+ curl.exe -s "https://api.portal.acconcept.ru/api/library/context-search?q=множество&location=/S&subfolders=1&item_type=rsform"
162
+ ```
163
+
164
+ Типичный пайплайн агента — найти id, затем метаданные и при необходимости полную КС:
165
+
166
+ ```bash
167
+ # 1. Поиск
168
+ curl.exe -s "https://api.portal.acconcept.ru/api/library/context-search?q=множество"
169
+
170
+ # 2. Метаданные найденных объектов (подставь ids из шага 1)
171
+ curl.exe -s "https://api.portal.acconcept.ru/api/library/by-ids?ids=856,1203"
172
+
173
+ # 3. Полная КС для переноса в rstool (только для выбранной схемы)
174
+ curl.exe -s "https://api.portal.acconcept.ru/api/rsforms/856/details"
175
+ ```
35
176
 
36
177
  ## Формат `GET /api/rsforms/:id/details`
37
178
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rsconcept/rstool",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "description": "Agent-facing library for incremental RSForm construction, RSLang analysis, diagnostics, modeling, and evaluation. Wraps @rsconcept/domain with a deterministic session contract and stdio wrapper.",
5
5
  "license": "MIT",
6
6
  "author": "IRBorisov",
@@ -70,7 +70,7 @@
70
70
  "prepublishOnly": "npm run build"
71
71
  },
72
72
  "dependencies": {
73
- "@rsconcept/domain": "^1.5.0"
73
+ "@rsconcept/domain": "^1.6.0"
74
74
  },
75
75
  "devDependencies": {
76
76
  "@types/node": "^26.0.1",
@@ -52,6 +52,8 @@
52
52
  не открывай SPA и не парси HTML. Преобразуй ссылку в REST API по правилам
53
53
  [PORTAL-API.md](../../docs/PORTAL-API.md): метаданные `GET /api/rsforms/:id`,
54
54
  полная КС `GET /api/rsforms/:id/details`, версия `GET /api/library/:id/versions/:version`.
55
+ Если id неизвестен — контекстный поиск `GET /api/library/context-search?q=...`, затем
56
+ метаданные по найденным id: `GET /api/library/by-ids?ids=...` (curl и поля поиска — в том же файле).
55
57
 
56
58
  Portal JSON из `/details` не является форматом `exportSession` и не передаётся в
57
59
  `importSession` напрямую. Создай `createSession({ title, alias, comment: description })`