@rsconcept/rstool 0.9.1 → 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.
@@ -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.1",
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",
@@ -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 })`