@rsconcept/rstool 0.5.0 → 0.5.2

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.
package/README.md CHANGED
@@ -4,7 +4,7 @@ Agent-facing library for **incremental RSForm construction**, **RSLang expressio
4
4
 
5
5
  ## Agent skill
6
6
 
7
- RS language + rstool workflows for agents: `skills/rstool-helper/` (`GUIDE.md`, `REFERENCE.md`, `EXAMPLES.md`) and `docs/` (`DOMAIN.md`, `CONCEPTUAL-SCHEMA.md` for relation-first KS design, `SYNTAX.md`, …). A **thin** entry skill is installed into the project’s agent skills folder; see [Installing the agent skill](#installing-the-agent-skill) below.
7
+ RS language + rstool workflows for agents: `skills/rstool-helper/` (`GUIDE.md`, `REFERENCE.md`, `EXAMPLES.md`) and `docs/` (`DOMAIN.md`, `CONCEPTUAL-SCHEMA.md`, `SYNTAX.md`, …). A **thin** entry skill is installed into the project’s agent skills folder; see [Installing the agent skill](#installing-the-agent-skill) below.
8
8
 
9
9
  ## Install
10
10
 
@@ -12,7 +12,21 @@ RS language + rstool workflows for agents: `skills/rstool-helper/` (`GUIDE.md`,
12
12
  npm install @rsconcept/rstool
13
13
  ```
14
14
 
15
- `@rsconcept/domain` is a peer-of-dependency installed automatically. No Portal checkout is required.
15
+ `@rsconcept/domain` is a peer-of-dependency installed automatically.
16
+
17
+ ## Installing the agent skill
18
+
19
+ After `npm install @rsconcept/rstool`, **you do not copy files yourself**. Ask your agent, for example:
20
+
21
+ > Install the rstool agent skill according to the package instructions.
22
+
23
+ The agent should read and follow:
24
+
25
+ `node_modules/@rsconcept/rstool/skills/INSTALL.md`
26
+
27
+ That copies `skills/rstool-helper/SKILL.md` from the package into your host’s project skills directory (for example `.agents/skills/rstool-helper/SKILL.md`). Full guidance stays in the package (`skills/rstool-helper/GUIDE.md`, `docs/*.md`) and is read from `node_modules` when needed.
28
+
29
+ Details: `skills/README.md`.
16
30
 
17
31
  ## Quick use (library)
18
32
 
@@ -50,7 +64,6 @@ await client.close();
50
64
  - Parse / syntax / semantic / type analysis for expressions.
51
65
  - In-memory modeling: set base bindings and structured values; evaluate expressions and constituents.
52
66
  - Deterministic diagnostics and export/import for reproducible agent workflows.
53
- - Library API + stdio JSON wrapper as the only supported transports (MCP adapter lives in [`@rsconcept/rstool-mcp`](../rstool-mcp/)).
54
67
 
55
68
  ## Publishing
56
69
 
@@ -128,20 +141,6 @@ The example:
128
141
  - sets a base binding and evaluates a term
129
142
  - fetches diagnostics
130
143
 
131
- ## Installing the agent skill
132
-
133
- After `npm install @rsconcept/rstool`, **you do not copy files yourself**. Ask your agent, for example:
134
-
135
- > Install the rstool agent skill according to the package instructions.
136
-
137
- The agent should read and follow:
138
-
139
- `node_modules/@rsconcept/rstool/skills/INSTALL.md`
140
-
141
- That copies `skills/rstool-helper/SKILL.md` from the package into your host’s project skills directory (for example `.agents/skills/rstool-helper/SKILL.md`). Full guidance stays in the package (`skills/rstool-helper/GUIDE.md`, `docs/*.md`) and is read from `node_modules` when needed.
142
-
143
- Details: `skills/README.md`.
144
-
145
144
  ## License
146
145
 
147
146
  MIT
@@ -1,57 +1,70 @@
1
1
  # Концептуальная схема
2
2
 
3
- Справка про проектирование КС как системы определений. Для механики см. `CONSTITUENTA.md`, `SYNTAX.md`, `TYPIFICATION.md`.
3
+ Общие правила проектирования КС как системы определений. Механика: `CONSTITUENTA.md`, `SYNTAX.md`, `TYPIFICATION.md`.
4
4
 
5
- ## Цель схемы
5
+ ## Цель
6
6
 
7
- КС ценна не числом конституент, а различениями, которые она вводит.
7
+ КС ценна не числом конституент, а различениями.
8
8
 
9
- - Добавляй понятие, если оно дает новый критерий, роль, отношение, инвариант или правило.
10
- - Если пользователь постоянно переформулирует одно различие, введи отдельную конституенту.
9
+ - Добавляй конституенту, если есть новый критерий выбора, роль, отношение, инвариант или правило.
10
+ - Если одно различие постоянно переформулируется, выдели отдельную конституенту.
11
+ - Не копируй источник дословно. Строй предметную модель.
12
+ - Разработка КС ведется итеративно - вводи понятия, экспликцируй определения, формируй новый понтия, исследуй предметную область.
11
13
 
12
- Подробнее про структуру и поля конституент см. в [CONSTITUENTA.md](./CONSTITUENTA.md).
14
+ ## Предметная редукция
15
+
16
+ Концептуализация решает задачу, не переписывает весь источник.
17
+
18
+ - Рассматривай только нужный аспект определения.
19
+ - Нужно опускать неважные отношения.
20
+ - Можно не различать предметные термины, если задача не требует различения.
21
+ - Если различение влияет на критерий, вывод или проверку, введи его явно.
13
22
 
14
23
  ## Номиноиды и атрибутирование
15
24
 
16
- `N#` — номиноид: именованная сущность для словаря схемы. Он помогает фиксировать термин до точной родоструктурной формализации.
25
+ `N#` — номиноид: именованная сущность словаря до точной родоструктурной формализации.
26
+
27
+ Атрибутирование связывает `N#` с конституентами отношением "быть атрибутом". Это отдельная атрибутивная экспликация, не замена `S#`, `D#`, `A#`.
28
+
29
+ Правило: не смешивай атрибутивную и родоструктурную экспликацию без явного запроса.
17
30
 
18
- Атрибутирование связывает номиноид с другими конституентами через атрибуты. Это отдельная атрибутивная экспликация, не замена `S#`, `D#`, `A#` в родоструктурной экспликации.
31
+ ## Базовые понятия
19
32
 
20
- Правило для `rstool`: не смешивай атрибутивную и родоструктурную экспликацию если явно не указано пользователем.
33
+ `X#`, `C#`, и `S#` это базовые понятия, их нельзя строить одно из другого и включать друг в друга как элементы или подмножества.
34
+ Если такое возникает — значит есть скрытое отношение, его нужно явно оформить отдельной производной конституентой.
35
+ Если базисные множества пересекаются по интерпретации или набор констант показывает какой-то атрибут — отсутствует нужное отношение, его надо ввести.
21
36
 
22
37
  ## Родовые структуры
23
38
 
24
- `S#` — родовая структура. Ее `definitionFormal` задает типизацию, а смысл задают конвенция, интерпретация и аксиомы.
39
+ `S#` — родовая структура. `definitionFormal` задает типизацию; смысл задают `convention`, интерпретация, аксиомы.
25
40
 
26
- Паттерн для отношения:
41
+ Паттерн отношения:
27
42
 
28
43
  1. `X1` — базисное множество.
29
44
  2. `S1: ℬ(X1×X1)` — отношение; предметное пояснение в `convention`.
30
45
  3. `D# := Pr1(S1)`, `D# := Pr2(S1)` — именованные компоненты.
31
46
  4. Сложные термы строятся поверх этих `D#` и `S#`.
32
47
 
33
- Если повторяется цепочка вроде `Pr2(Fi1[D](S7))`, введи промежуточный терм или функцию `F#`.
48
+ Повторяется `Pr2(Fi1[...](...))` или похожая цепочка -> введи промежуточный `D#` или `F#`.
34
49
 
35
- ## Подход relation-first
50
+ ## Relation-first
36
51
 
37
- Используй при объединении нескольких исходных КС в одну предметную модель и при появлении длинных цепочек `∃d1…∃dn` в разных термах.
52
+ Используй, когда нужно объединить несколько КС или в термах повторяются длинные цепочки `∃d1…∃dn`.
38
53
 
39
- ### Семантическая лестница
54
+ Строй слоями; слой ссылается только на предыдущие:
40
55
 
41
- Строй схему слоями; каждый следующий слой ссылается только на предыдущие:
56
+ | Слой | Роль | Ввод |
57
+ | :--- | :-------------------- | :----------------------------------------------------------------------------- |
58
+ | 1 | Базисные множества | `X#`, `C#`; пустой `definitionFormal`, смысл в `convention` / `definitionText` |
59
+ | 2 | Структуры | `S#`; типизация `ℬ(…×…)`, конвенция кортежа |
60
+ | 3 | Инварианты | `A#`; короткие ограничения, чаще через `card` |
61
+ | 4 | Доступ | `F#`; локальный API вида `[α∈…] Pr*(Fi*[…](S#))` |
62
+ | 5 | Центральное отношение | один `D#` или `S#`, задающий полную траекторию синтеза |
63
+ | 6 | Витрина | `D#` через `Pr*`, `Fi*`, `card`, `red`; узкие `F#` для аналитики |
42
64
 
43
- | Слой | Роль | Что вводить |
44
- | :--- | :--------------------- | :------------------------------------------------------------------------------------------- |
45
- | 1 | Базис | `X#`, `C#` — пустой `definitionFormal`, смысл в `convention` / `definitionText` из источника |
46
- | 2 | Структуры | `S#` — типизация `ℬ(…×…)` и конвенция на кортеж |
47
- | 3 | Инварианты | `A#` — короткие ограничения (см. ниже про `card`) |
48
- | 4 | Параметрический доступ | `F#` — «локальный API»: `[α∈…] Pr*(Fi*[…](S#))` |
49
- | 5 | Центральное отношение | один `D#` (или `S#` с конвенцией), задающий полную траекторию синтеза |
50
- | 6 | Витрина понятий | `D#` через `Pr*`, `Fi*`, `card`, `red`; узкие `F#` для аналитики |
65
+ ## Центральное отношение
51
66
 
52
- ### Центральное отношение
53
-
54
- Когда в тексте описан единый сценарий, зафиксируй его **одним** объектом:
67
+ Единый сценарий фиксируй одним объектом:
55
68
 
56
69
  ```text
57
70
  D13 ::= I{(α, ξ1, τ, ξ2, β1, β2, ρ, ξ3) |
@@ -59,58 +72,27 @@ D13 ::= I{(α, ξ1, τ, ξ2, β1, β2, ρ, ξ3) |
59
72
  }
60
73
  ```
61
74
 
62
- (Имена и арность по предметной области; важна форма: кортеж + ограничения через уже введённые `F#` и `S#`.)
75
+ Имена и арность зависят от предметной области. Важна форма: кортеж + ограничения через уже введенные `F#` и `S#`.
63
76
 
64
- Далее можешь дать название необходимым частям кортежа с помощью `D#` через `Pr#`
77
+ Части кортежа называй через `D# := Pr#(D13)`.
65
78
 
66
- ### Инварианты: `card` вместо длинных `∀`
79
+ ## Инварианты
67
80
 
68
- Для функциональности отношения удобно:
81
+ Для функциональности отношения предпочитай `card`:
69
82
 
70
83
  ```text
71
84
  card(S1) = card(Pr1,2(S1))
72
85
  ```
73
86
 
74
- Эквивалентно идее `∀d1,d2∈S1 ...`
75
-
76
- Оставляй `∀`/`∃`, когда не получается заменить на теоретико-множественные и структурные конструкции.
87
+ Это заменяет длинные `∀d1,d2∈S1 ...`. Оставляй `∀` / `∃`, только если выражение нельзя задать через множества, проекции, фильтры, `card`.
77
88
 
78
- ### Проекции вместо повторных кванторов
89
+ ## Производные термы
79
90
 
80
- Если условие уже задано на `S#` или центральном `D#`, производный терм — это почти всегда:
91
+ Если условие уже задано на `S#` или центральном `D#`, производный терм обычно:
81
92
 
82
93
  - `Prk(…)` / `Pri,j(…)`;
83
94
  - `Fi*k[{…}](…)`;
84
- - `D{ξ∈… | F[ξ] = …}` или `card(F[ξ]) = 1`.
85
-
86
- Перед тем как писать `D{x∈… | ∃d1∈… ∃d2∈…}`, проверь: нельзя ли выразить через `Pr` от уже введённого отношения.
87
-
88
- ## Проверка на маленькой модели
89
-
90
- Когда семантика определения не очевидна, используй концептуальную модель как тестовый стенд: задай минимальные значения для `X#`, `C#`, `S#` и вычисли проверяемые `D#`, `F#`, `P#`, `A#`.
91
-
92
- Это особенно полезно для проекций, фильтров, `red`, `bool` / `debool` и аксиом. Если проверка важна для будущих изменений, перенеси ее в скрипт-тест: собрать маленькую сессию, задать значения неопределяемых конституент, вычислить целевые конституенты и проверить не только `success`, но и ожидаемое `value`.
93
-
94
- Подробный цикл: `MODEL-TESTING.md`.
95
-
96
- ## Быстрое ревью
97
-
98
- - Атрибутивная экспликация не смешана с родоструктурной без явного запроса пользователя.
99
- - Не добавляй проверки принадлежности к собственной типизации: если `x` уже объявлен в `X1`, `x ∈ X1` избыточно.
100
- - Покрыты главные предметные сущности, роли, отношения и утверждения.
101
- - Повторяющиеся отборы вынесены в `F#`, а не размазаны по термам.
102
- - У каждой аксиомы понятна цель.
103
- - Частые падения аксиом в модели указывают на ошибку данных или семантики схемы.
104
- - Сомнительные выражения проверены на маленькой КМ, если есть показательные тестовые данные.
105
-
106
- ## Рабочий порядок
95
+ - `D{ξ∈… | F[ξ] = …}`;
96
+ - `card(F[ξ]) = 1`.
107
97
 
108
- 1. Собери словарь предметной области (базисы, ключевые отношения, сценарий синтеза).
109
- 2. Добавь `X#` и `C#` с конвенциями из источника.
110
- 3. Добавь базовые `S#` (трансформация, перевод, допускание, выбор, цели, субъекты).
111
- 4. Добавь `A#` на структуры (`card`, покрытие `Pr1,2(S#)=…`, принадлежность выбора).
112
- 5. Введи `F#` для типовых запросов.
113
- 6. Производные понятия — `Pr*` / `Fi*` / `F#` от центрального `D#` и базовых `S#`.
114
- 7. Узкие классификаторы (`для любой обстановки`, `для одного индивида`) — через `F#` и `card`/`=` с `X#`, не новые монолиты.
115
- 8. Перед каждым upsert — `analyzeExpression`.
116
- 9. Для сомнительной семантики — маленькая КМ (`MODEL-TESTING.md`).
98
+ Перед `D{x∈… | ∃d1∈… ∃d2∈…}` проверь, нельзя ли взять `Pr` от уже введенного отношения.
@@ -51,5 +51,3 @@
51
51
  3. Все глобальные ссылки уже есть в сессии.
52
52
  4. `axiom` и `statement` имеют типизацию `Logic`, иначе `expectedLogic`.
53
53
  5. Выводимая конституента с пустой формулой дает `cstEmptyDerived`.
54
-
55
- Цикл: `analyzeExpression` на черновике → исправить `diagnostics[].from/to` → `addOrUpdateConstituenta`.
@@ -78,8 +78,4 @@
78
78
 
79
79
  ## Цикл исправления
80
80
 
81
- 1. Запусти `analyzeExpression`.
82
- 2. Прочитай `code`, `from`, `to`, `params`.
83
- 3. Исправь именно диапазон в `definitionFormal`.
84
- 4. Не повторяй вызов без изменения ввода.
85
- 5. После успеха вызывай `addOrUpdateConstituenta`.
81
+ Пошаговый цикл — в `../skills/rstool-helper/GUIDE.md`, раздел «Цикл диагностик». Здесь — справочник кодов и типичных ошибок.
package/docs/DOMAIN.md CHANGED
@@ -12,13 +12,21 @@
12
12
  - **Типизация / ступень** — структура значений выражения: элемент, целое, кортеж, множество, `Logic`.
13
13
  - **Граф термов** — зависимости: конституента ссылается на другую в формальном определении.
14
14
 
15
+ ## Классификация понятий КС
16
+
17
+ - **Базовое (неопределяемое) понятие** — конституента, вводимая конвенцией (и при необходимости аксиомами), а не формальным определением. В родоструктурной экспликации: `X#`, `C#`, `S#`. Смысл задают `convention`, интерпретация и аксиомы.
18
+ - **Производное понятие** — конституента с формальным определением на RSLang: `D#`, `F#`, `P#` и связанные выводимые конструкции. Значение получают из определения при заданной интерпретации базовых понятий.
19
+ - **Ядро КС** — базовые понятия, аксиомы и производные понятия, необходимые для их формулировки.
20
+ - **Тело КС** — остальные конституенты схемы, не входящие в ядро.
21
+ - **Интерпретация** — соотнесение понятий КС с сущностями предметной области. В концептуальной модели задаётся значениями неопределяемых конституент и вычислением производных.
22
+
15
23
  ## Конституенты
16
24
 
17
25
  **Конституента** — часть КС. Главное для агента: `alias`, `cstType`, `definitionFormal`, `term`, `definitionText`, `convention`. `comment` — комментарий и пояснения разработчика схемы, полезно для контекста.
18
26
 
19
27
  - `N#` — **номиноид**: словарная сущность. В родоструктурной экспликации не используется.
20
28
  - `X#` — **базисное множество**: неопределяемое понятие, формула пустая.
21
- - `C#` — **константное множество**: неопределяемое множество для арифметики и порядка, формула пустая.
29
+ - `C#` — **константное множество**: неопределяемое понятие для арифметики и порядка, формула пустая.
22
30
  - `S#` — **родовая структура**: неопределяемое структурное понятие; формула задает типизацию.
23
31
  - `D#` — **терм**: определяемое понятие; формула вычисляет значение.
24
32
  - `F#` — **терм-функция**: параметризованный терм.
@@ -11,15 +11,6 @@
11
11
 
12
12
  Для простой проверки типизации сначала используй `analyzeExpression`. КМ нужна, когда вопрос зависит от интерпретации данных и вычисленного значения.
13
13
 
14
- ## Минимальный цикл
15
-
16
- 1. Создай отдельную `createSession` или изолированную копию текущей сессии.
17
- 2. Добавь только нужные поставщики: `X#`, `C#`, `S#` и проверяемые `D#` / `F#` / `P#` / `A#`.
18
- 3. Проверь формулы через `analyzeExpression` и `addOrUpdateConstituenta`.
19
- 4. Задай значения базисов и структур через `setConstituentaValue` или `setConstituentaValues`.
20
- 5. Вычисли проверяемую формулу через `evaluateExpression` или сохраненную конституенту через `evaluateConstituenta`.
21
- 6. Сравни результат с ожидаемым значением; если есть несколько зависимых определений, запусти `recalculateModel`.
22
-
23
14
  ## Что задавать руками
24
15
 
25
16
  `basic`, `constant`, `structure` можно интерпретировать напрямую. `term`, `function`, `predicate`, `axiom`, `statement` должны вычисляться из формулы, поэтому их напрямую не задавай.
@@ -32,7 +23,13 @@ const TUPLE_ID = -111;
32
23
  tool.setConstituentaValues(sessionId, {
33
24
  items: [
34
25
  { target: 1, value: { 0: 'ann', 1: 'bob', 2: 'cat' } },
35
- { target: 2, value: [[TUPLE_ID, 0, 1], [TUPLE_ID, 0, 2]] }
26
+ {
27
+ target: 2,
28
+ value: [
29
+ [TUPLE_ID, 0, 1],
30
+ [TUPLE_ID, 0, 2]
31
+ ]
32
+ }
36
33
  ]
37
34
  });
38
35
  ```
package/docs/README.md CHANGED
@@ -1,10 +1,12 @@
1
1
  # Документация rstool
2
2
 
3
- Краткая русская справка для агентов.
3
+ Краткая справка для агентов.
4
+
5
+ **Воркфлоу и чеклисты** — в `../skills/rstool-helper/GUIDE.md` (начинай с него). Здесь — справочные правила языка и предметной области.
4
6
 
5
7
  ## Какой файл читать
6
8
 
7
- - **DOMAIN.md** — термины Portal: конституента, концептуальная схема/модель, ОСС, синтез.
9
+ - **DOMAIN.md** — термины Portal: конституента, базовые и производные понятия, ядро/тело КС, интерпретация, ОСС, синтез.
8
10
  - **CONCEPTUAL-SCHEMA.md** — проектирование и ревью концептуальных схем.
9
11
  - **CONSTITUENTA.md** — структура и правила конституент.
10
12
  - **SYNTAX.md** — операторы, кванторы, функции и примеры выражений.
@@ -14,4 +16,4 @@
14
16
  - **PORTAL-API.md** — объекты REST API Portal.
15
17
  - **GRAMMAR-REF.md** — краткая карта токенов и приоритетов.
16
18
 
17
- Контракт агента `rstool` см. в `../skills/rstool-helper/REFERENCE.md`.
19
+ Контракт агента `rstool` и примеры `../skills/rstool-helper/REFERENCE.md`, `EXAMPLES.md` (на русском, вместе с `GUIDE.md`).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rsconcept/rstool",
3
- "version": "0.5.0",
3
+ "version": "0.5.2",
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",
package/skills/README.md CHANGED
@@ -6,9 +6,9 @@ Each skill lives in its own subdirectory: `skills/<skill-name>/SKILL.md` (plus r
6
6
 
7
7
  - `INSTALL.md`: agent procedure after `npm install`
8
8
  - `rstool-helper/SKILL.md`: thin entry skill — copy into the project’s agent skills folder (see `INSTALL.md`)
9
- - `rstool-helper/GUIDE.md`: canonical workflow and language primer
10
- - `rstool-helper/REFERENCE.md`: API, stdio, contract
11
- - `rstool-helper/EXAMPLES.md`: worked examples and pitfalls
9
+ - `rstool-helper/GUIDE.md`: единая точка входа воркфлоу, чеклисты, обзор языка (на русском)
10
+ - `rstool-helper/REFERENCE.md`: API, stdio, контракт (на русском)
11
+ - `rstool-helper/EXAMPLES.md`: примеры и типичные ошибки (на русском)
12
12
  - `../docs/*.md`: language reference (DOMAIN, SYNTAX, DIAGNOSTICS, …)
13
13
 
14
14
  ## npm workflow
@@ -1,10 +1,8 @@
1
- # rstool Examples
1
+ # Примеры rstool
2
2
 
3
- Short examples for agents. For full scripts, see `../../examples/`.
3
+ Короткие примеры для агентов. Полные скрипты `../../examples/`. Воркфлоу — [GUIDE.md](GUIDE.md).
4
4
 
5
- ## Minimal Session
6
-
7
- `S1` carries typification `ℬ(X1×X1)` for relation pairs. `D1` computes `Pr1(S1)`. Do not put bare `X1×X1` on a `term` when you mean a relation structure.
5
+ ## Минимальная сессия
8
6
 
9
7
  ```ts
10
8
  import { CstType, RSToolAgent } from '@rsconcept/rstool';
@@ -22,7 +20,7 @@ tool.addOrUpdateConstituenta(sessionId, {
22
20
  alias: 'S1',
23
21
  cstType: CstType.STRUCTURED,
24
22
  definitionFormal: 'ℬ(X1×X1)',
25
- convention: 'Elements are (parent, child) pairs with parent, child ∈ X1.'
23
+ convention: 'Элементы пары (родитель, потомок); родитель, потомок ∈ X1.'
26
24
  }
27
25
  });
28
26
 
@@ -33,9 +31,9 @@ const { state, diagnostics } = tool.addOrUpdateConstituenta(sessionId, {
33
31
  console.log(state.analysis.success, diagnostics.length);
34
32
  ```
35
33
 
36
- ## Analyze Before Upsert
34
+ ## Анализ перед upsert
37
35
 
38
- Use scratch analysis when syntax or `cstType` is uncertain.
36
+ Черновой анализ, когда синтаксис или `cstType` под вопросом.
39
37
 
40
38
  ```ts
41
39
  const analysis = tool.analyzeExpression(sessionId, {
@@ -48,60 +46,9 @@ if (!analysis.success) {
48
46
  }
49
47
  ```
50
48
 
51
- Fix the reported `from` / `to` range, then re-run analysis. Do not retry unchanged input.
52
-
53
- ## Wrapper Client
49
+ Исправь диапазон `from` / `to` из отчёта и повтори анализ. При необходимости пересмотри определение целиком или разбей на несколько конституент.
54
50
 
55
- Use the wrapper when the agent talks to a separate `rstool-wrapper` process.
56
-
57
- ```ts
58
- import { CstType } from '@rsconcept/rstool';
59
- import { RSToolWrapperClient } from '@rsconcept/rstool/wrapper';
60
-
61
- const client = new RSToolWrapperClient();
62
- await client.waitUntilReady();
63
-
64
- const { sessionId } = await client.call<{ sessionId: string }>('createSession');
65
-
66
- await client.call('addOrUpdateConstituenta', {
67
- sessionId,
68
- input: {
69
- draft: { id: 1, alias: 'X1', cstType: CstType.BASE, definitionFormal: '' }
70
- }
71
- });
72
-
73
- const diagnostics = await client.call('listDiagnostics', { sessionId });
74
- console.log(diagnostics);
75
-
76
- await client.close();
77
- ```
78
-
79
- Manual stdio is one JSON request per line:
80
-
81
- ```jsonl
82
- { "id": "1", "method": "createSession", "params": {} }
83
- { "id": "2", "method": "addOrUpdateConstituenta", "params": { "sessionId": "...", "input": { "draft": { "id": 1, "alias": "X1", "cstType": "basic", "definitionFormal": "" } } } }
84
- ```
85
-
86
- ## Export / Import
87
-
88
- ```ts
89
- const payload = tool.exportSession(sessionId);
90
- const restored = tool.importSession(payload);
91
- ```
92
-
93
- Export includes session state and model values.
94
-
95
- To create files the user can upload to an existing Portal object:
96
-
97
- ```ts
98
- const schemaJson = tool.exportPortalSchema(sessionId);
99
- const modelJson = tool.exportPortalModel(sessionId);
100
- ```
101
-
102
- Use `schemaJson` on a schema page and `modelJson` on a model page via **Load from JSON**.
103
-
104
- ## Evaluation
51
+ ## Вычисление
105
52
 
106
53
  ```ts
107
54
  tool.setConstituentaValue(sessionId, {
@@ -117,11 +64,11 @@ const scratch = tool.evaluateExpression(sessionId, {
117
64
  console.log(scratch.success, scratch.value); // true, 3
118
65
  ```
119
66
 
120
- For stored definitions, set values for `basic`, `constant`, and `structure`, then call `evaluateConstituenta` or `recalculateModel`.
67
+ Для сохранённых определений задай значения `basic`, `constant` и `structure`, затем вызови `evaluateConstituenta` или `recalculateModel`.
121
68
 
122
- ## Semantic Smoke Test
69
+ ## Семантический smoke-тест
123
70
 
124
- When syntax is valid but meaning is uncertain, build a tiny model and assert the value.
71
+ Синтаксис верен, но смысл неочевиден собери маленькую модель и проверь значение.
125
72
 
126
73
  ```ts
127
74
  import { CstType, EvalStatus, RSToolAgent } from '@rsconcept/rstool';
@@ -156,76 +103,59 @@ tool.setConstituentaValues(sessionId, {
156
103
  const result = tool.evaluateConstituenta(sessionId, { constituentId: 3 });
157
104
 
158
105
  if (!result.success || result.status !== EvalStatus.HAS_DATA || JSON.stringify(result.value) !== '[0]') {
159
- throw new Error(`Expected Pr1(S1) to select the first coordinate; got ${JSON.stringify(result)}`);
106
+ throw new Error(`Ожидалось Pr1(S1) = первая координата; получено ${JSON.stringify(result)}`);
160
107
  }
161
108
  ```
162
109
 
163
- Use this pattern for tests that protect important definitions. Full kinship model: `../../examples/build-kinship-rsmodel.ts`. More notes: `../../docs/MODEL-TESTING.md`.
110
+ Подробнее: `../../docs/MODEL-TESTING.md`.
111
+
112
+ ## Клиент обёртки
164
113
 
165
- ## Relation-first synthesis (layered KS)
114
+ Когда агент общается с отдельным процессом `rstool-wrapper`.
166
115
 
167
- Pattern for merging sub-schemas (transformation + transition + choice → stimulation). Reference: Portal `D01B03` / rsform `843`.
116
+ ```ts
117
+ import { CstType } from '@rsconcept/rstool';
118
+ import { RSToolWrapperClient } from '@rsconcept/rstool/wrapper';
168
119
 
169
- 1. **Structures** one `S#` per mechanism, typification only:
120
+ const client = new RSToolWrapperClient();
121
+ await client.waitUntilReady();
170
122
 
171
- ```text
172
- S1: ℬ(X1×X2×X1) // transformation
173
- S2: (X2×X3×X2) // transition
174
- S4: ℬ(X2×X1×X3) // allowance (flat triple, not ℬ(X2×X1×ℬ(X3)))
175
- S5: ℬ(X1×ℬ(X3)×X3) // choice
176
- ```
123
+ const { sessionId } = await client.call<{ sessionId: string }>('createSession');
124
+
125
+ await client.call('addOrUpdateConstituenta', {
126
+ sessionId,
127
+ input: {
128
+ draft: { id: 1, alias: 'X1', cstType: CstType.BASE, definitionFormal: '' }
129
+ }
130
+ });
177
131
 
178
- 2. **Axioms** short invariants:
132
+ const diagnostics = await client.call('listDiagnostics', { sessionId });
133
+ console.log(diagnostics);
179
134
 
180
- ```text
181
- A1: Pr1,2(S1) = X1×X2
182
- A2: card(S1) = card(Pr1,2(S1))
183
- A4: card(S5) = card(Pr1,2(S5))
184
- A5: ∀d∈S5 pr3(d)∈pr2(d)
135
+ await client.close();
185
136
  ```
186
137
 
187
- 3. **Functions**parameterized access (reuse everywhere):
138
+ Ручной stdioодин JSON-запрос на строку:
188
139
 
189
- ```text
190
- F5[α,β] := Pr3(Fi1,2[{(β,α)}](S4)) // possible actions
191
- F7[α,ξ] := F6[α, F5[α,ξ]] // chosen action in situation
140
+ ```jsonl
141
+ { "id": "1", "method": "createSession", "params": {} }
142
+ { "id": "2", "method": "addOrUpdateConstituenta", "params": { "sessionId": "...", "input": { "draft": { "id": 1, "alias": "X1", "cstType": "basic", "definitionFormal": "" } } } }
192
143
  ```
193
144
 
194
- 4. **Central term** — one tuple relation, then projections:
145
+ ## Экспорт / импорт
195
146
 
196
- ```text
197
- D13 ::= I{(α,ξ1,τ,ξ2,β1,β2,ρ,ξ3) | α∈S6; ξ1∈X2; τ∈F7[α,ξ1]; …; ξ3∈S3}
198
- D14 := Pr3(D13) // stimuli
199
- D18 := Pr2(D13) // initial situations
147
+ ```ts
148
+ const payload = tool.exportSession(sessionId);
149
+ const restored = tool.importSession(payload);
200
150
  ```
201
151
 
202
- 5. **Classifiers** filter via `F#`, not a new `∃` chain:
152
+ Экспорт включает состояние сессии и значения модели.
203
153
 
204
- ```text
205
- F8[α] := Pr2(Fi3[{α}](D13))
206
- D22 := D{ξ∈D14 | F8[ξ] = X2} // stimulus valid in any situation
154
+ Файлы для загрузки пользователем в существующий объект Portal:
155
+
156
+ ```ts
157
+ const schemaJson = tool.exportPortalSchema(sessionId);
158
+ const modelJson = tool.exportPortalModel(sessionId);
207
159
  ```
208
160
 
209
- Upsert in dependency order; run `analyzeExpression` on `I{…}` before committing the central `D#`.
210
-
211
- ## Common mistakes
212
-
213
- - `definitionFormal: 'Z'` on `basic` / `constant` → `definitionNotAllowed`.
214
- - `D1` uses `D2` before `D2` exists → global not typed / undeclared.
215
- - Wrong `cstType` in `analyzeExpression` → role-specific errors.
216
- - `term` with `X1×X1` for a relation → full Cartesian product, not relation typification.
217
- - `structure` with `Pr1(S1)` → wrong role; projections belong on `term` / `function`.
218
- - Same long `∃d1…∃dn` chain in many `D#` → define one central `D#` and use `Pr*` / `F#`.
219
- - `S4: ℬ(X2×X1×ℬ(X3))` when you only need «individual allows actions» → prefer `ℬ(X2×X1×X3)` + `F5`.
220
- - `∀x∈A, ∀y∈B` → invalid; nest: `∀x∈A (∀y∈B (…))`.
221
- - Functional relation axiom as huge `∀⇒` → prefer `card(S)=card(Pr1,2(S))` when equivalent.
222
- - `setConstituentaValue` on `term`, `axiom`, or `statement` → cannot set computed constituents directly.
223
- - Evaluation before base bindings → missing value, empty result, or evaluation failure.
224
-
225
- ## Fix Syntax
226
-
227
- 1. `analyzeExpression` with the broken fragment and correct `cstType`.
228
- 2. Read `{ code, from, to, params }`.
229
- 3. Edit the substring of `definitionFormal` at those offsets.
230
- 4. Re-run analysis.
231
- 5. Upsert with the same `id` / `alias`.
161
+ `schemaJson` на странице схемы, `modelJson` на странице модели, через **Load from JSON**.
@@ -1,68 +1,122 @@
1
- # RS Language & rstool
1
+ # RSLang и rstool
2
2
 
3
- Compact entry guide for agents. Keep details in linked docs.
3
+ Краткий входной гайд для агентов. Детали в связанных документах.
4
4
 
5
- **RSLang** is a formal notation for conceptual schemas: concepts, relations, operations, assertions. Core ideas: membership `x∈y`, set-theoretic expressions, logical expressions, typification.
5
+ **RSLang** формальная нотация концептуальных схем: понятия, отношения, операции, утверждения. Основа: принадлежность `x∈y`, теоретико-множественные и логические выражения, типизация.
6
6
 
7
- **rstool** is the agent API for sessions, upserts, analysis, diagnostics, model values, evaluation, export/import.
7
+ **rstool** API агента для сессий, upsert, анализа, диагностик, значений модели, вычисления, экспорта/импорта.
8
8
 
9
- - Library: `@rsconcept/rstool`.
10
- - Analyzer: `@rsconcept/domain`.
11
- - Stdio wrapper: `npx rstool-wrapper`, JSON per line.
12
- - Node client: `RSToolWrapperClient`.
9
+ - Библиотека: `@rsconcept/rstool`.
10
+ - Анализатор: `@rsconcept/domain`.
11
+ - Stdio-обёртка: `npx rstool-wrapper`, JSON построчно.
12
+ - Node-клиент: `RSToolWrapperClient`.
13
13
 
14
- ## What to Read
14
+ ## Что читать
15
15
 
16
- Paths are relative to this file.
16
+ Пути относительно этого файла.
17
17
 
18
- - API, methods, stdio, error codes: [REFERENCE.md](REFERENCE.md).
19
- - Worked examples and pitfalls: [EXAMPLES.md](EXAMPLES.md).
20
- - Domain terms: [../../docs/DOMAIN.md](../../docs/DOMAIN.md).
21
- - Schema design rules: [../../docs/CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md).
22
- - Constituents and validation: [../../docs/CONSTITUENTA.md](../../docs/CONSTITUENTA.md).
23
- - Syntax: [../../docs/SYNTAX.md](../../docs/SYNTAX.md).
24
- - Typification: [../../docs/TYPIFICATION.md](../../docs/TYPIFICATION.md).
25
- - Definition testing with small conceptual models: [../../docs/MODEL-TESTING.md](../../docs/MODEL-TESTING.md).
26
- - Diagnostics: [../../docs/DIAGNOSTICS.md](../../docs/DIAGNOSTICS.md).
27
- - Portal REST reads: [../../docs/PORTAL-API.md](../../docs/PORTAL-API.md).
28
- - Grammar pointers: [../../docs/GRAMMAR-REF.md](../../docs/GRAMMAR-REF.md).
18
+ - API, методы, stdio, коды ошибок: [REFERENCE.md](REFERENCE.md).
19
+ - Примеры: [EXAMPLES.md](EXAMPLES.md).
20
+ - Термины предметной области: [../../docs/DOMAIN.md](../../docs/DOMAIN.md).
21
+ - Концептуализация, создание схемы: [../../docs/CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md).
22
+ - Конституенты и валидация: [../../docs/CONSTITUENTA.md](../../docs/CONSTITUENTA.md).
23
+ - Синтаксис: [../../docs/SYNTAX.md](../../docs/SYNTAX.md).
24
+ - Типизация: [../../docs/TYPIFICATION.md](../../docs/TYPIFICATION.md).
25
+ - Проверка определений на КМ: [../../docs/MODEL-TESTING.md](../../docs/MODEL-TESTING.md).
26
+ - Диагностики: [../../docs/DIAGNOSTICS.md](../../docs/DIAGNOSTICS.md).
27
+ - Грамматика: [../../docs/GRAMMAR-REF.md](../../docs/GRAMMAR-REF.md).
28
+ - REST Portal: [../../docs/PORTAL-API.md](../../docs/PORTAL-API.md).
29
29
 
30
- ## Workflow
30
+ ## Воркфлоу
31
31
 
32
- Use this when editing or checking schemas and models.
32
+ Все пошаговые сценарии собраны здесь. Справочные документы дают правила и детали.
33
33
 
34
- 1. `createSession`.
35
- 2. Add `basic` (`X#`) and `constant` (`C#`) with `definitionFormal: ''`.
36
- 3. Add dependencies before dependents.
37
- 4. Use `analyzeExpression` before upsert when unsure.
38
- 5. When unsure about semantics, build a tiny conceptual model and evaluate test data.
39
- 6. Fix diagnostics by `from` / `to` range in `definitionFormal`.
40
- 7. `commitStep` when the state is coherent.
41
- 8. Set base/model values with `setConstituentaValue(s)`.
42
- 9. Evaluate with `evaluateExpression`, `evaluateConstituenta`, or `recalculateModel`.
43
- 10. Persist with `exportSession` / `importSession`.
44
- 11. For user-uploadable Portal files, use `exportPortalSchema` for schema JSON or `exportPortalModel` for model JSON.
34
+ ### Редактирование и проверка схемы
45
35
 
46
- ## Diagnostics Loop
36
+ Когда схема уже есть и нужны точечные правки, новые конституенты или проверка формул.
47
37
 
48
- 1. Check `analysis.success`.
49
- 2. If false, read `analysis.diagnostics` or `listDiagnostics`.
50
- 3. Map `code` to a fix in `DIAGNOSTICS.md`.
51
- 4. Patch the reported `from` / `to` range.
52
- 5. Re-run only after changing input.
38
+ 1. `createSession` (или продолжить существующую сессию).
39
+ 2. Развивай схему добавляй конституенты с корректным `cstType` и атрибутами.
40
+ 3. Добавляй поставщиков раньше потребителей (см. [порядок объявления](#порядок-объявления-конституент)).
41
+ 4. Перед upsert при сомнении вызывай `analyzeExpression`.
42
+ 5. Исправляй диагностики по диапазону `from` / `to` в `definitionFormal` ([DIAGNOSTICS.md](../../docs/DIAGNOSTICS.md)).
43
+ 6. При сомнении в семантике собери маленькую КМ и проверь тестовые данные ([цикл КМ](#проверка-на-маленькой-км)).
44
+ 7. Задай базовые/модельные значения: `setConstituentaValue(s)`; вычисли: `evaluateExpression`, `evaluateConstituenta`, `recalculateModel`.
45
+ 8. `commitStep`, когда состояние согласовано.
46
+ 9. Сохрани: `exportSession` / `importSession`.
47
+ 10. Для загрузки в Portal: `exportPortalSchema` (схема) или `exportPortalModel` (модель).
53
48
 
54
- ## Declaration Order
49
+ ### Концептуализация (КС из содержания источника)
50
+
51
+ Когда нужно построить или существенно развить КС по тексту ПО, требованиям или предметному описанию. Правила редукции, слоёв и паттернов — [CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md).
52
+
53
+ 1. Собери словарь: базовые понятия, ключевые отношения, сценарий синтеза.
54
+ 2. Добавь `X#`, `C#` с конвенциями из источника (не копируй дословно).
55
+ 3. Добавь базовые `S#`: трансформация, перевод, допускание, выбор, цели, субъекты.
56
+ 4. Проверь независимость базовых понятий — они не выводятся друг из друга.
57
+ 5. Добавь `A#` на структуры: `card`, покрытие `Pr1,2(S#)=…`, принадлежность выбора.
58
+ 6. Введи `F#` для типовых запросов.
59
+ 7. Производные понятия строй через `Pr*`, `Fi*`, `F#` от центрального `D#` и базовых `S#`.
60
+ 8. Перед каждым upsert — `analyzeExpression`; при ошибках — [цикл диагностик](#цикл-диагностик).
61
+ 9. Сомнительную семантику проверь на маленькой КМ ([цикл КМ](#проверка-на-маленькой-км), [MODEL-TESTING.md](../../docs/MODEL-TESTING.md)).
62
+ 10. Перед показом результата пройди [чеклист ревью КС](#ревью-концептуальной-схемы).
63
+
64
+ Дальше — обычное [редактирование и проверка](#редактирование-и-проверка-схемы): commit, export.
65
+
66
+ ### Цикл диагностик
67
+
68
+ Когда `analysis.success === false` или `listDiagnostics` не пуст. Коды и типичные ошибки — [DIAGNOSTICS.md](../../docs/DIAGNOSTICS.md).
69
+
70
+ 1. Запусти `analyzeExpression` (черновик без сохранения).
71
+ 2. Прочитай `code`, `from`, `to`, `params` в `analysis.diagnostics` или через `listDiagnostics`.
72
+ 3. Сопоставь `code` с исправлением в [DIAGNOSTICS.md](../../docs/DIAGNOSTICS.md).
73
+ 4. Исправь именно диапазон в `definitionFormal`.
74
+ 5. Не повторяй вызов без изменения ввода.
75
+ 6. После успеха — `addOrUpdateConstituenta`.
76
+
77
+ ### Проверка на маленькой КМ
78
+
79
+ Когда синтаксис верен, но смысл формулы неочевиден. Подробности и форма данных — [MODEL-TESTING.md](../../docs/MODEL-TESTING.md).
80
+
81
+ 1. Отдельная `createSession` или изолированная копия текущей сессии.
82
+ 2. Только нужные поставщики: `X#`, `C#`, `S#` и проверяемые `D#` / `F#` / `P#` / `A#`.
83
+ 3. `analyzeExpression` и `addOrUpdateConstituenta`.
84
+ 4. Значения базовых понятий: `setConstituentaValue` / `setConstituentaValues`.
85
+ 5. `evaluateExpression` или `evaluateConstituenta`; сравни с ожидаемым `value`.
86
+ 6. При нескольких зависимых определениях — `recalculateModel`.
87
+
88
+ Для регрессий вынеси проверку в скрипт или colocated `*.test.ts` (см. [MODEL-TESTING.md](../../docs/MODEL-TESTING.md)).
89
+
90
+ ### Порядок объявления конституент
55
91
 
56
92
  1. `basic`, `constant`.
57
- 2. Core structures and key concepts.
58
- 3. Derived constituents in topological order.
59
- 4. Axioms and statements after their references.
60
-
61
- ## Checklist
62
-
63
- - [ ] `sessionId` tracked.
64
- - [ ] `cstType` matches the role.
65
- - [ ] Check schema and fix errors before showing result.
66
- - [ ] Diagnostics handled before commit/export.
67
- - [ ] Ambiguous semantics checked on a small model.
68
- - [ ] Base values set before evaluation.
93
+ 2. Базовые структуры и ключевые понятия.
94
+ 3. Производные конституенты в топологическом порядке.
95
+ 4. Аксиомы и утверждения после всех ссылок.
96
+
97
+ Правила валидации по типам — [CONSTITUENTA.md](../../docs/CONSTITUENTA.md).
98
+
99
+ ## Чеклисты
100
+
101
+ ### Сессия и rstool
102
+
103
+ - [ ] Отслеживается `sessionId`.
104
+ - [ ] `cstType` соответствует роли конституенты.
105
+ - [ ] Поставщики добавлены раньше потребителей.
106
+
107
+ ### Перед показом, commit и export
108
+
109
+ - [ ] Схема проверена; ошибки исправлены.
110
+ - [ ] Диагностики обработаны до `commitStep` и экспорта.
111
+
112
+ ### Ревью концептуальной схемы
113
+
114
+ Перед завершением концептуализации или крупного изменения. Правила — [CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md).
115
+
116
+ - [ ] Атрибутивная и родоструктурная экспликации не смешаны без явного запроса.
117
+ - [ ] Нет избыточной проверки принадлежности к собственной типизации (`x∈X1`, если `x` уже в `X1`).
118
+ - [ ] Базовые понятия независимы, введены необходимые по смысле аксиомы.
119
+ - [ ] Покрыты главные сущности, роли, отношения, утверждения.
120
+ - [ ] В текстовых определениях используются только понятия из схемы.
121
+ - [ ] Повторяющиеся части формальных определений вынесены в производные понятия `D#` и `F#`.
122
+ - [ ] Сомнительная семантика проверена на маленькой КМ при наличии тестовых данных.
@@ -1,41 +1,41 @@
1
- # RS language and rstool — reference
2
-
3
- ## rstool contract
4
-
5
- - Package: `@rsconcept/rstool`
6
- - Contract version: `1.4.0` (`CONTRACT_VERSION`)
7
- - Core class: `RSToolAgent`
8
- - Public imports: `@rsconcept/rstool` and `@rsconcept/rstool/wrapper`
9
-
10
- ### Methods
11
-
12
- | Method | Purpose |
13
- | ----------------------------------------------------------- | ------------------------------------------------------------------ |
14
- | `createSession(initial?)` | New in-memory session → `{ sessionId, contractVersion }` |
15
- | `addOrUpdateConstituenta(sessionId, { draft })` | Merge draft; analyze in session context → `{ state, diagnostics }` |
16
- | `analyzeExpression(sessionId, { expression, cstType })` | Parse/typecheck snippet without persisting a constituent |
17
- | `getFormState(sessionId)` | Clone of full session state |
18
- | `listDiagnostics(sessionId, filters?)` | Accumulated diagnostics; optional `constituentId` filter |
19
- | `commitStep(sessionId, message?)` | Record revision checkpoint |
20
- | `exportSession(sessionId)` | JSON string `{ contractVersion, state, diagnostics }` |
21
- | `exportPortalSchema(sessionId)` | Portal schema import JSON string using versioned schema shape |
22
- | `exportPortalModel(sessionId)` | Portal model import JSON string using versioned model values shape |
23
- | `importSession(payload)` | New session from export |
24
- | `setConstituentaValue(sessionId, { target, type?, value })` | Set one base binding or structured value → `SessionModelState` |
25
- | `setConstituentaValues(sessionId, { items })` | Batch set values → `SessionModelState` |
26
- | `clearConstituentaValues(sessionId, { items })` | Clear values by constituent id → `SessionModelState` |
27
- | `getModelState(sessionId)` | Clone of session interpretation state |
28
- | `evaluateExpression(sessionId, { expression, cstType })` | Evaluate snippet in session context → `EvaluationResult` |
29
- | `evaluateConstituenta(sessionId, { constituentId })` | Evaluate stored definition → `EvaluationResult` |
30
- | `recalculateModel(sessionId)` | Recalculate all inferrable constituents → `{ items[] }` |
1
+ # RSLang и rstool — справочник
2
+
3
+ ## Контракт rstool
4
+
5
+ - Пакет: `@rsconcept/rstool`
6
+ - Версия контракта: `1.4.0` (`CONTRACT_VERSION`)
7
+ - Основной класс: `RSToolAgent`
8
+ - Публичные импорты: `@rsconcept/rstool` и `@rsconcept/rstool/wrapper`
9
+
10
+ ### Методы
11
+
12
+ | Метод | Назначение |
13
+ | ----------------------------------------------------------- | ----------------------------------------------------------------------------- |
14
+ | `createSession(initial?)` | Новая in-memory сессия → `{ sessionId, contractVersion }` |
15
+ | `addOrUpdateConstituenta(sessionId, { draft })` | Слияние черновика; анализ в контексте сессии → `{ state, diagnostics }` |
16
+ | `analyzeExpression(sessionId, { expression, cstType })` | Разбор/типизация фрагмента без сохранения конституенты |
17
+ | `getFormState(sessionId)` | Клон полного состояния сессии |
18
+ | `listDiagnostics(sessionId, filters?)` | Накопленные диагностики; опциональный фильтр `constituentId` |
19
+ | `commitStep(sessionId, message?)` | Зафиксировать контрольную точку ревизии |
20
+ | `exportSession(sessionId)` | JSON-строка `{ contractVersion, state, diagnostics }` |
21
+ | `exportPortalSchema(sessionId)` | JSON импорта схемы Portal |
22
+ | `exportPortalModel(sessionId)` | JSON импорта модели Portal |
23
+ | `importSession(payload)` | Новая сессия из экспорта |
24
+ | `setConstituentaValue(sessionId, { target, type?, value })` | Одна привязка базового понятия или структурное значение → `SessionModelState` |
25
+ | `setConstituentaValues(sessionId, { items })` | Пакетная установка значений → `SessionModelState` |
26
+ | `clearConstituentaValues(sessionId, { items })` | Очистка значений по id конституент → `SessionModelState` |
27
+ | `getModelState(sessionId)` | Клон состояния интерпретации сессии |
28
+ | `evaluateExpression(sessionId, { expression, cstType })` | Вычисление фрагмента в контексте сессии → `EvaluationResult` |
29
+ | `evaluateConstituenta(sessionId, { constituentId })` | Вычисление сохранённого определения → `EvaluationResult` |
30
+ | `recalculateModel(sessionId)` | Пересчёт всех выводимых конституент → `{ items[] }` |
31
31
 
32
32
  ### `ConstituentaDraft`
33
33
 
34
34
  ```ts
35
35
  {
36
- id: number; // stable id within session
37
- alias: string; // e.g. "D1", "X1"
38
- cstType: CstType; // see GUIDE.md table
36
+ id: number; // стабильный id внутри сессии
37
+ alias: string;
38
+ cstType: CstType;
39
39
  definitionFormal: string;
40
40
  term?: string;
41
41
  definitionText?: string;
@@ -43,27 +43,27 @@
43
43
  }
44
44
  ```
45
45
 
46
- Omitted text fields default to `''` in stored state.
46
+ Пропущенные текстовые поля в сохранённом состоянии по умолчанию `''`.
47
47
 
48
- ### `SessionState` metadata
48
+ ### Метаданные `SessionState`
49
49
 
50
- Set on `createSession(initial?)` or via `importSession`:
50
+ Задаются в `createSession(initial?)` или через `importSession`:
51
51
 
52
52
  ```ts
53
53
  {
54
- alias: string; // library item alias
55
- title: string; // display title
56
- comment: string; // developer notes
54
+ alias: string; // alias объекта библиотеки
55
+ title: string; // отображаемое название
56
+ comment: string; // заметки разработчика
57
57
  }
58
58
  ```
59
59
 
60
- All default to `''` when omitted.
60
+ При опускании все поля по умолчанию `''`.
61
61
 
62
- ### Model and evaluation types
62
+ ### Типы модели и вычисления
63
63
 
64
64
  ```ts
65
- type RSToolValue = number | RSToolValue[]; // runtime value (sets, tuples, logic 0/1)
66
- type BasicBinding = Record<number, string>; // base-set element labels
65
+ type RSToolValue = number | RSToolValue[]; // значение во время выполнения
66
+ type BasicBinding = Record<number, string>; // подписи элементов базового множества
67
67
 
68
68
  interface SessionModelState {
69
69
  items: { id: number; type: string; value: RSToolValue | BasicBinding }[];
@@ -79,19 +79,19 @@ interface EvaluationResult {
79
79
  }
80
80
  ```
81
81
 
82
- Base/constant bindings use `type: "basic"` and `value: { "0": "label", … }`. Structured values use normalized typification as `type` and nested arrays for sets/tuples.
82
+ Привязки `basic`/`constant` используют `type: "basic"` и `value: { "0": "label", … }`. Структурные значения нормализованная типизация в `type` и вложенные массивы для множеств/кортежей.
83
83
 
84
- ### Stdio protocol
84
+ ### Протокол stdio
85
85
 
86
- Process: `npx rstool-wrapper`
86
+ Процесс: `npx rstool-wrapper`
87
87
 
88
- 1. **Ready** (no request): `{"id":null,"ok":true,"result":{"ready":true,"wrapper":"rstool-stdio","contractVersion":"1.4.0"}}`
89
- 2. **Request**: `{"id":"<unique>","method":"<name>","params":{...}}`
90
- 3. **Response**: `{"id":"<same>","ok":true,"result":...}` or `{"id":"...","ok":false,"error":{"code":"...","message":"..."}}`
88
+ 1. **Ready** (без запроса): `{"id":null,"ok":true,"result":{"ready":true,"wrapper":"rstool-stdio","contractVersion":"1.4.0"}}`
89
+ 2. **Запрос**: `{"id":"<unique>","method":"<name>","params":{...}}`
90
+ 3. **Ответ**: `{"id":"<same>","ok":true,"result":...}` или `{"id":"...","ok":false,"error":{"code":"...","message":"..."}}`
91
91
 
92
- Extra methods: `ping`, `methods`.
92
+ Дополнительные методы: `ping`, `methods`.
93
93
 
94
- Example chain:
94
+ Пример цепочки:
95
95
 
96
96
  ```json
97
97
  {"id":"1","method":"createSession","params":{}}
@@ -108,96 +108,90 @@ Example chain:
108
108
  {"id":"9","method":"evaluateConstituenta","params":{"sessionId":"…","input":{"constituentId":3}}}
109
109
  ```
110
110
 
111
- `RSToolWrapperClient`: spawns `rstool-wrapper` by default and implements `waitUntilReady()`, `call(method, params)`, `close()`.
111
+ `RSToolWrapperClient`: по умолчанию запускает `rstool-wrapper`; методы `waitUntilReady()`, `call(method, params)`, `close()`.
112
112
 
113
- ### Analysis result
113
+ ### Результат анализа
114
114
 
115
115
  ```ts
116
116
  interface AnalysisResult {
117
117
  success: boolean;
118
- type: Record<string, unknown> | null; // typification tree
118
+ type: Record<string, unknown> | null;
119
119
  valueClass: 'value' | 'property' | null;
120
120
  diagnostics: { code: number; from: number; to: number; params?: string[] }[];
121
121
  }
122
122
  ```
123
123
 
124
- ## RS language — conceptual model
124
+ ## RSLang
125
125
 
126
- - **Typification**: structure type of an expression; grades include elements (`Xi`, `Ci`), `Z`, tuples `(H1×…×Hn)`, sets `ℬ(H)`, logic `Logic`, parameterized `Hr 🠔 [H1,…,Hi]`. On `structure` (`S#`), `definitionFormal` **is** the typification. On `term` (`D#`), typification is **inferred from** the definition.
127
- - **Term graph**: directed dependencies between constituenta via alias references in definitions.
128
- - **`S#` vs `D#`**: same `×` token — in `ℬ(X1×X1)` on `S#` it forms a **grade** (pair type); in `X1×X1` on `D#` it is the **Cartesian product** (all pairs). Relations: `S#` + `convention`, then derived `D#` (`Pr1(S1)`, …).
126
+ Кратко: язык на базе логики первого порядка; разделение множественных и логических выражений; параметризованные шаблоны для функций и предикатов.
129
127
 
130
- Intro (help): language is FOL-based; set vs logic expression split; parameterized templates for term/predicate functions.
128
+ - **Типизация**: структурный тип выражения; ступени включают элементы (`Xi`, `Ci`), `Z`, кортежи `(H1×…×Hn)`, множества `ℬ(H)`, логику `Logic`, параметризованные `Hr 🠔 [H1,…,Hi]`. У `structure` (`S#`) поле `definitionFormal` **задаёт** типизацию. У `term` (`D#`) типизация **выводится** из определения.
131
129
 
132
- ## Grammar tokens (selected)
130
+ ## Токены грамматики
133
131
 
134
- From `rslang.grammar`:
132
+ Из `rslang.grammar`:
135
133
 
136
- | Category | Tokens / forms |
137
- | ---------------------- | ---------------------------------------------------------- |
138
- | Globals | `X`, `C`, `S`, `D`, `A`, `T`, `N` + digits (`Global` rule) |
139
- | Functions / predicates | `F<n>`, `P<n>` |
140
- | Radicals | `R<n>` |
141
- | Locals | `_a-zα-ω` + optional digits |
142
- | Logic | `¬` `∀` `∃` `⇔` `⇒` `∨` `&` |
143
- | Sets | `ℬ` `∪` `\` `∆` `∩` `×` `∈` `∉` `⊆` `⊂` … |
144
- | Ops | `Pr`, `pr`, `Fi`, `card`, `bool`, `debool`, `red` |
145
- | Literals | digits, `Z`, `∅` |
134
+ | Категория | Токены / формы |
135
+ | ------------------- | ------------------------------------------------------- |
136
+ | Глобальные | `X`, `C`, `S`, `D`, `A`, `T` + цифры (правило `Global`) |
137
+ | Функции / предикаты | `F<n>`, `P<n>` |
138
+ | Радикалы | `R<n>` |
139
+ | Локальные | `_a-zα-ω` + опциональные цифры |
140
+ | Логика | `¬` `∀` `∃` `⇔` `⇒` `∨` `&` |
141
+ | Множества | `ℬ` `∪` `\` `∆` `∩` `×` `∈` `∉` `⊆` `⊂` … |
142
+ | Операции | `Pr`, `pr`, `Fi`, `card`, `bool`, `debool`, `red` |
143
+ | Литералы | цифры, `Z`, `∅` |
146
144
 
147
- Full grammar pointers and precedence notes: `docs/GRAMMAR-REF.md`.
145
+ Полная грамматика и приоритеты: `docs/GRAMMAR-REF.md`.
148
146
 
149
- ## Help topic map (companion docs)
147
+ ## Документация
150
148
 
151
- Standalone agents should consult the bundled distilled docs (`docs/*.md` inside `@rsconcept/rstool`):
149
+ | Тема | Документ |
150
+ | ---------------------------------------- | ------------------------------------------------------------ |
151
+ | Идентификаторы, литералы | `docs/SYNTAX.md` § «Имена и литералы» |
152
+ | Ступени, `Logic`, параметризованные типы | `docs/TYPIFICATION.md` § «Ступени» |
153
+ | Логические выражения | `docs/SYNTAX.md` § «Логические выражения (LE)» |
154
+ | Операторы над множествами | `docs/SYNTAX.md` § «Теоретико-множественные выражения (STE)» |
155
+ | Целочисленная арифметика | `docs/SYNTAX.md` § «Арифметика» |
156
+ | Дополнительные и производные типизации | `docs/TYPIFICATION.md` § «Дополнительные типизации» |
157
+ | Кванторы | `docs/SYNTAX.md` § «Кванторы» |
158
+ | Параметризованные функции, шаблоны | `docs/SYNTAX.md` § «Параметризованные выражения» |
159
+ | Модель корректности / валидация | `docs/SYNTAX.md` § «Корректность» |
160
+ | Семантические тесты определений | `docs/MODEL-TESTING.md` |
161
+ | Словарь предметной области | `docs/DOMAIN.md` |
162
+ | Поля конституент и порядок | `docs/CONSTITUENTA.md` |
163
+ | REST API Portal | `docs/PORTAL-API.md` |
164
+ | Токены грамматики / приоритеты | `docs/GRAMMAR-REF.md` |
152
165
 
153
- | Topic | Bundled doc |
154
- | ------------------------------------ | ------------------------------------------ |
155
- | Identifiers, literals | `docs/SYNTAX.md` § _Identifier rules_ |
156
- | Grades, `Logic`, parameterized types | `docs/TYPIFICATION.md` |
157
- | Logical expressions | `docs/SYNTAX.md` § _Logical expressions_ |
158
- | Set operators | `docs/SYNTAX.md` § _Set-theoretic_ |
159
- | Integer arithmetic | `docs/SYNTAX.md` § _Arithmetic_ |
160
- | Structural / typification reshaping | `docs/TYPIFICATION.md` § _Forming/derived_ |
161
- | Quantifiers | `docs/SYNTAX.md` § _Quantifiers_ |
162
- | Parameterized functions, templates | `docs/SYNTAX.md` § _Parameterised_ |
163
- | Correctness / validation mindset | `docs/SYNTAX.md` § _Correctness model_ |
164
- | Definition semantic tests | `docs/MODEL-TESTING.md` |
165
- | Domain vocabulary | `docs/DOMAIN.md` |
166
- | Constituent fields and ordering | `docs/CONSTITUENTA.md` |
167
- | Portal REST API | `docs/PORTAL-API.md` |
168
- | Grammar tokens / precedence | `docs/GRAMMAR-REF.md` |
166
+ Воркфлоу и чеклисты — `skills/rstool-helper/GUIDE.md`.
169
167
 
170
- ## Error codes (rstool-relevant)
168
+ ## Коды ошибок
171
169
 
172
- rstool re-exports `RSErrorCode.definitionNotAllowed` (`0x8862`) for base/constant violations.
170
+ Категории и исправления по коду: `docs/DIAGNOSTICS.md`.
173
171
 
174
- Categories and per-code fix guidance: `docs/DIAGNOSTICS.md`.
172
+ Категории:
175
173
 
176
- Categories:
174
+ - `0x84xx` — синтаксис / разбор
175
+ - `0x28xx` — предупреждения локальных объявлений
176
+ - `0x88xx` — семантика / типы
177
+ - `0x886x` — уровень конституент (пустая производная, запрещённое определение)
178
+ - `0x81xx` — вычисление (runtime; из `evaluateExpression` / `evaluateConstituenta`)
177
179
 
178
- - `0x84xx` syntax / parse
179
- - `0x28xx` — local declaration warnings
180
- - `0x88xx` — semantic / type
181
- - `0x886x` — constituent-level (empty derived, definition not allowed)
182
- - `0x81xx` — evaluation (runtime; returned by `evaluateExpression` / `evaluateConstituenta`)
180
+ ## Форма экспорта сессии
183
181
 
184
- ## Exported session shape
182
+ `exportSession(sessionId)` возвращает JSON-строку `{ contractVersion, state, diagnostics }`.
185
183
 
186
- `exportSession(sessionId)` returns a JSON string with `{ contractVersion, state, diagnostics }`.
184
+ - `state.alias`, `state.title`, `state.comment` метаданные объекта библиотеки для экспорта в Portal (`comment` JSON `description`).
185
+ - `state.items[]` — каждая конституента с `id`, `alias`, `cstType`, `definitionFormal`, опциональными текстовыми полями и вложенным результатом анализа.
186
+ - `state.model.items[]` — присутствует, если заданы значения интерпретации.
187
+ - `diagnostics[]` — накопленные диагностики со смещениями и кодами.
187
188
 
188
- - `state.alias`, `state.title`, `state.comment` — library-item metadata for Portal export (`comment` → JSON `description`).
189
- - `state.items[]` contains each constituent with `id`, `alias`, `cstType`, `definitionFormal`, optional text fields, and nested analysis output.
190
- - `state.model.items[]` is present when interpretation values have been set.
191
- - `diagnostics[]` contains accumulated diagnostics with offsets and codes.
189
+ ## JSON импорта Portal
192
190
 
193
- ## Portal import JSON
191
+ Для **Load from JSON** на существующей схеме или модели Portal:
194
192
 
195
- For **Load from JSON** on an existing Portal schema or model:
193
+ - `exportPortalSchema(sessionId)` файл схемы
194
+ - `exportPortalModel(sessionId)` — файл модели
196
195
 
197
- - `exportPortalSchema(sessionId)` schema file
198
- - `exportPortalModel(sessionId)` model file
199
-
200
- Both return `contract_version` `1.0.0` plus required `title`, `alias`, `description`, and `items`. Schema files may include `attribution`. Values come from `state.title`, `state.alias`, and `state.comment` (empty fields fall back to `Conceptual schema` / `SCHEMA` or `Conceptual model` / `MODEL` and `""`).
201
-
202
- - Schema `items[]`: versioned constituent fields (`cst_type`, `definition_formal`, `term_raw`, …).
203
- - Model `items[]`: `{ id, type, value }` per binding.
196
+ - Схема `items[]`: поля конституент (`cst_type`, `definition_formal`, `term_raw`, …).
197
+ - Модель `items[]`: `{ id, type, value }` на каждую привязку.
@@ -1,12 +1,10 @@
1
1
  ---
2
2
  name: rstool-helper
3
3
  description: >-
4
- RS language and @rsconcept/rstool for agents. After npm install, read GUIDE and
5
- docs from node_modules. If the entry skill is not installed in the project yet,
6
- follow skills/INSTALL.md in this package.
4
+ RS language, formal definitions and conceptual schema design for agents. Read GUIDE and docs from node_modules.
7
5
  ---
8
6
 
9
- # rstool-helper (npm install)
7
+ # rstool-helper
10
8
 
11
9
  Thin **entry** skill. Full guide and docs stay in the package — use the Read tool on the paths below (from the project root).
12
10
 
@@ -20,9 +18,9 @@ Then continue with the canonical files below.
20
18
 
21
19
  ## Canonical files (read before rstool work)
22
20
 
23
- - **Start here** — workflow: `node_modules/@rsconcept/rstool/skills/rstool-helper/GUIDE.md`
24
- - API, stdio, contract: `node_modules/@rsconcept/rstool/skills/rstool-helper/REFERENCE.md`
25
- - Examples, pitfalls: `node_modules/@rsconcept/rstool/skills/rstool-helper/EXAMPLES.md`
21
+ - **Start here** — воркфлоу и чеклисты: `node_modules/@rsconcept/rstool/skills/rstool-helper/GUIDE.md`
22
+ - API, stdio, контракт: `node_modules/@rsconcept/rstool/skills/rstool-helper/REFERENCE.md`
23
+ - Примеры, типичные ошибки: `node_modules/@rsconcept/rstool/skills/rstool-helper/EXAMPLES.md`
26
24
  - Language / domain docs: `node_modules/@rsconcept/rstool/docs/*.md`
27
25
  - Install procedure: `node_modules/@rsconcept/rstool/skills/INSTALL.md`
28
26