@rsconcept/rstool 1.0.3 → 1.1.1

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
@@ -52,9 +52,7 @@ Or run it as a child process from your own code:
52
52
  ```ts
53
53
  import { RSToolWrapperClient } from '@rsconcept/rstool/wrapper';
54
54
 
55
- // Default is for checkout/dev use: `npm run wrapper` in the current cwd.
56
- // For an installed package, pass { command: 'npx', args: ['rstool-wrapper'] }.
57
- const client = new RSToolWrapperClient();
55
+ const client = new RSToolWrapperClient({ command: 'npx', args: ['rstool-wrapper'] });
58
56
  await client.waitUntilReady();
59
57
  const session = await client.call<{ sessionId: string }>('createSession');
60
58
  await client.close();
@@ -71,17 +69,6 @@ await client.close();
71
69
 
72
70
  Maintainers: see [PUBLISHING.md](./PUBLISHING.md) for npm release steps.
73
71
 
74
- ## Repo scripts
75
-
76
- From `rsconcept/rstool` (or run `powershell -File scripts/dev/LocalDevSetup.ps1` from the repo root on Windows):
77
-
78
- - `npm install` / `npm ci`
79
- - `npm run typecheck`
80
- - `npm test`
81
- - `npm run build` — produce `dist/` via tsdown
82
- - `npm run wrapper` — dev stdio wrapper via `tsx`
83
- - `npm run example:client`, `npm run example:build-schema`, `npm run example:build-rsmodel` — полный список `example:*` и `kinship:cli` в [`examples/README.md`](examples/README.md)
84
-
85
72
  ## Stdio protocol
86
73
 
87
74
  - Input: one JSON request per line.
@@ -164,7 +151,7 @@ Response:
164
151
  Run:
165
152
 
166
153
  ```bash
167
- npm run example:client
154
+ npx tsx node_modules/@rsconcept/rstool/examples/agent-client.ts
168
155
  ```
169
156
 
170
157
  File: [`examples/agent-client.ts`](examples/agent-client.ts)
@@ -9,7 +9,7 @@
9
9
  - Добавляй конституенту, если есть новый критерий выбора, роль, отношение, инвариант или правило.
10
10
  - Если одно различие постоянно переформулируется, выдели отдельную конституенту.
11
11
  - Не копируй источник дословно. Строй предметную модель.
12
- - Разработка КС ведется итеративно - вводи понятия, экспликцируй определения, формируй новый понтия, исследуй предметную область.
12
+ - Разработка КС ведется итеративно - вводи понятия, эксплицируй определения, формируй новый понтия, исследуй предметную область.
13
13
 
14
14
  ## Предметная редукция
15
15
 
@@ -34,10 +34,11 @@
34
34
  Если такое возникает — значит есть скрытое отношение, его нужно явно оформить отдельной производной конституентой.
35
35
  Если базисные множества пересекаются по интерпретации или набор констант показывает какой-то атрибут — отсутствует нужное отношение, его надо ввести.
36
36
 
37
+ Не вводи `S#` для отношения, которое предметно зависит от уже заданных структур и должно вычисляться из них. Такое отношение оформляй как `D#`, `F#` или `P#`. Если нужная операция не выражается текущим синтаксисом, фиксируй это как ограничение языка или модели, а не подменяй производное отношение новой независимой структурой.
38
+
37
39
  ## Родовые структуры
38
40
 
39
41
  `S#` — родовая структура. `definitionFormal` задает типизацию; смысл задают `convention`, интерпретация, аксиомы.
40
-
41
42
  Паттерн отношения:
42
43
 
43
44
  1. `X1` — базисное множество.
@@ -47,36 +48,15 @@
47
48
 
48
49
  Повторяется `Pr2(Fi1[...](...))` или похожая цепочка -> введи промежуточный `D#` или `F#`.
49
50
 
50
- ## Relation-first
51
-
52
- Используй, когда нужно объединить несколько КС или в термах повторяются длинные цепочки `∃d1…∃dn`.
53
-
54
- Строй слоями; слой ссылается только на предыдущие:
55
-
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#` для аналитики |
51
+ ## Разворачивание понятий
64
52
 
65
- ## Центральное отношение
66
-
67
- Единый сценарий фиксируй одним объектом:
68
-
69
- ```text
70
- D13 ::= I{(α, ξ1, τ, ξ2, β1, β2, ρ, ξ3) |
71
- α∈S6; ξ1∈X2; τ∈F7[α,ξ1]; …; ξ3∈S3
72
- }
73
- ```
53
+ При концептуализации вводи понятия по зависимостям: базовые (`X#`, `C#`, независимые `S#`), аксиомы `A#`, затем производные `D#` / `P#` / `A#`. Каждый шаг опирается только на уже введённые конституенты.
74
54
 
75
- Имена и арность зависят от предметной области. Важна форма: кортеж + ограничения через уже введенные `F#` и `S#`.
55
+ Не обязательно сводить схему к одному «центральному» отношению. Зачастую нужны разные понятия на пересечении нескольких аспектов — структур, ролей, ограничений, сценариев. Каждый аспект может дать свои `S#` и `F#`; производные термы выражают их сочетания.
76
56
 
77
- Части кортежа называй через `D# := Pr#(D13)`.
57
+ Если один сценарий естественно задаётся кортежем с ограничениями через уже введённые `F#` и `S#`, оформи его как `D#` или независимый `S#`; части кортежа именуй через `D# := Pr#(…)`.
78
58
 
79
- ## Инварианты
59
+ ## Формулировки аксиом
80
60
 
81
61
  Для функциональности отношения предпочитай `card`:
82
62
 
@@ -84,11 +64,12 @@ D13 ::= I{(α, ξ1, τ, ξ2, β1, β2, ρ, ξ3) |
84
64
  card(S1) = card(Pr1,2(S1))
85
65
  ```
86
66
 
87
- Это заменяет длинные `∀d1,d2∈S1 ...`. Оставляй `∀` / `∃`, только если выражение нельзя задать через множества, проекции, фильтры, `card`.
67
+ Это заменяет длинные `∀d1,d2∈S1 ...`.
68
+ Оставляй `∀` / `∃`, только если выражение нельзя задать через множества, проекции, фильтры, `card`.
88
69
 
89
- ## Производные термы
70
+ ## Производные понятия
90
71
 
91
- Если условие уже задано на `S#` или центральном `D#`, производный терм обычно:
72
+ Если условие уже задано на `S#` или составном `D#`, производный терм обычно:
92
73
 
93
74
  - `Prk(…)` / `Pri,j(…)`;
94
75
  - `Fi*k[{…}](…)`;
@@ -7,7 +7,7 @@
7
7
  - `id` — стабильный id внутри сессии.
8
8
  - `alias` — имя вида `X1`, `D5`, `F2`; префикс должен совпадать с `cstType`.
9
9
  - `cstType` — роль конституенты.
10
- - `definitionFormal` — формальное определение; для `basic` и `constant` строго `''`.
10
+ - `definitionFormal` — формальное определение; для `basic` и `constant` строго `''`; для `structure` — область определения.
11
11
  - `term` — термин в естественном языке, используется в текстовых определениях. Если обозначаются элементы множества, то пишется с маленькой буквы во множественном числе. Иначе с большой буквы в единственном.
12
12
  - `definitionText` — текстовое определение, соответствующее формальному определению. Для простых выражений не указывается если совпадает с термином. Каждый используемый термин должен быть введен в схеме.
13
13
  - `convention` — соглашение для неопределяемого понятия. Может использовать термины, не определенные в схеме.
@@ -21,8 +21,8 @@
21
21
  - `nominal` / `N#` — номиноид. В родоструктурной экспликации и формальных определениях не используется.
22
22
  - `basic` / `X#` — базисное множество; формула пустая.
23
23
  - `constant` / `C#` — константное множество; формула пустая.
24
- - `structure` / `S#` — родовая структура; формула задает типизацию.
25
- - `term` / `D#` — терм; формула задает вычисляемое значение.
24
+ - `structure` / `S#` — родовая структура; `definitionFormal` задает область определения (типизацию).
25
+ - `term` / `D#` — терм; формальное определение задает вычисляемое значение.
26
26
  - `function` / `F#` — терм-функция.
27
27
  - `predicate` / `P#` — предикат-функция.
28
28
  - `axiom` / `A#` — аксиома; нужна типизация `Logic`.
@@ -30,20 +30,6 @@
30
30
 
31
31
  В модели `basic`, `constant`, `structure` можно интерпретировать через `setModelValues`. `term`, `function`, `predicate`, `axiom`, `statement` вычисляются и напрямую не задаются.
32
32
 
33
- ## Различие родовой структуры и терма
34
-
35
- `S#` — неопределяемое понятие - родовая структура. Пример: `definitionFormal: 'ℬ(X1×X1)'` описывает ступень элемента: множество пар над `X1`.
36
-
37
- `D#` — производное понятие - терм. Пример: `definitionFormal: 'X1×X1'` строит полный декартов продукт.
38
-
39
- Для бинарного отношения обычно нужно:
40
-
41
- 1. `X1` — базисное множество.
42
- 2. `S1` — `definitionFormal: 'ℬ(X1×X1)'`; конвенция объясняет порядок пары.
43
- 3. `D#` — проекции и фильтры: `Pr1(S1)`, `Pr2(S1)`, `Fi1[D1](S1)`.
44
-
45
- Пример: `examples/kinship/build-rsform.ts`.
46
-
47
33
  ## Валидация
48
34
 
49
35
  1. Префикс `alias` соответствует `cstType`.
@@ -1,7 +1,7 @@
1
1
  # Диагностика
2
2
 
3
3
  Читай, когда `analyzeExpression`, `applySchemaPatch`, `listDiagnostics` или `evaluate`
4
- вернули диагностику. Источник истины по кодам — `@rsconcept/domain/src/rslang/error.ts`.
4
+ вернули диагностику. Коды ошибок определяются анализатором `@rsconcept/domain`; полный перечень — в таблице ниже.
5
5
 
6
6
  ## Где лежит диагностика
7
7
 
package/docs/DOMAIN.md CHANGED
@@ -18,6 +18,7 @@
18
18
  - **Производное понятие** — конституента с формальным определением на RSLang: `D#`, `F#`, `P#` и связанные выводимые конструкции. Значение получают из определения при заданной интерпретации базовых понятий.
19
19
  - **Ядро КС** — базовые понятия, аксиомы и производные понятия, необходимые для их формулировки.
20
20
  - **Тело КС** — остальные конституенты схемы, не входящие в ядро.
21
+ - **Конвенция** — текстовое соглашение о том, как неопределяемое понятие соотносится с сущностями предметной области. В данных схемы хранится в поле `convention` конституенты. Конвенция не заменяет формальное определение и не проходит формальную проверку RSLang. Она фиксирует предметный смысл, который нельзя вывести из формулы: что именно считается элементом множества, как читать компоненты кортежа, какой порядок в паре отношения, какие константы или операции подразумеваются. В конвенции используется предметный язык и термины, которые могут быть не выражены в концептуальной схеме.
21
22
  - **Интерпретация** — соотнесение понятий КС с сущностями предметной области. В концептуальной модели задаётся значениями неопределяемых конституент и вычислением производных.
22
23
 
23
24
  ## Конституенты
@@ -4,14 +4,13 @@
4
4
 
5
5
  ## Когда использовать
6
6
 
7
- - Неочевидны `S#` против `D#`, проекции `Pr*` / `pr*`, фильтры `Fi*`, `red`, `bool`, `debool`.
8
7
  - Формула синтаксически корректна, но есть сомнение в семантике результата.
9
8
  - Нужно проверить, что аксиома действительно ловит ошибочные данные.
10
9
  - Пользователь просит надежно изменить важное определение, а пример данных можно сделать маленьким.
11
10
 
12
11
  Для простой проверки типизации сначала используй `analyzeExpression`. КМ нужна, когда вопрос зависит от интерпретации данных и вычисленного значения.
13
12
 
14
- ## Что задавать руками
13
+ ## Правила интерпретации
15
14
 
16
15
  `basic`, `constant`, `structure` можно интерпретировать напрямую. `term`, `function`, `predicate`, `axiom`, `statement` должны вычисляться из формулы, поэтому их напрямую не задавай.
17
16
 
@@ -4,23 +4,6 @@
4
4
  `rstool` сам не ходит в REST API: он работает с in-memory сессиями.
5
5
  Агент получает JSON Portal отдельно, затем переносит конституенты через контракт `rstool`.
6
6
 
7
- ## Репозиторий Portal
8
-
9
- Исходники приложения: [github.com/IRBorisov/ConceptPortal](https://github.com/IRBorisov/ConceptPortal)
10
-
11
- Для работы с продакшен API клон не обязателен — достаточно этого файла и OpenAPI (`/schema`).
12
- Если нужен исходный контекст, подгружай файлы из репозитория (Read в checkout, `git clone`, или просмотр на GitHub):
13
-
14
- | Нужно | Путь в репозитории |
15
- | ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
16
- | Правила монорепо, UI→API | [`AGENTS.md`](https://github.com/IRBorisov/ConceptPortal/blob/main/AGENTS.md) |
17
- | Обзор, локальная разработка | [`README.md`](https://github.com/IRBorisov/ConceptPortal/blob/main/README.md) |
18
- | Библиотека, context-search, by-ids | [`rsconcept/backend/apps/library/`](https://github.com/IRBorisov/ConceptPortal/tree/main/rsconcept/backend/apps/library) |
19
- | Правила и команды бэкенда | [`rsconcept/backend/AGENTS.md`](https://github.com/IRBorisov/ConceptPortal/blob/main/rsconcept/backend/AGENTS.md) |
20
- | RSForm / КС API | [`rsconcept/backend/apps/rsform/`](https://github.com/IRBorisov/ConceptPortal/tree/main/rsconcept/backend/apps/rsform) |
21
- | Хосты UI и API в проде | [`nginx/production.conf`](https://github.com/IRBorisov/ConceptPortal/blob/main/nginx/production.conf) |
22
- | Справка rstool (этот файл в npm) | [`rsconcept/rstool/docs/PORTAL-API.md`](https://github.com/IRBorisov/ConceptPortal/blob/main/rsconcept/rstool/docs/PORTAL-API.md) |
23
-
24
7
  ## Хосты
25
8
 
26
9
  - UI: `https://portal.acconcept.ru/`
@@ -66,7 +49,7 @@ GET https://api.portal.acconcept.ru/api/rsforms/856/details
66
49
 
67
50
  1. Пользователь временно делает схему публичной (`access_policy: public`).
68
51
  2. Пользователь экспортирует JSON (`GET /api/rsforms/:id/details` из своей сессии в UI
69
- или экспорт из Portal) и передаёт файл в чат/репозиторий — агент переносит в `rstool`.
52
+ или экспорт из Portal) и передаёт JSON в чат или файл — агент переносит в `rstool`.
70
53
  3. Работа с личной библиотекой остаётся в UI Portal; агент помогает с публичными схемами
71
54
  и с JSON, который пользователь явно предоставил.
72
55
 
package/docs/README.md CHANGED
@@ -9,11 +9,10 @@
9
9
  - **DOMAIN.md** — термины Portal: конституента, базовые и производные понятия, ядро/тело КС, интерпретация, ОСС, синтез.
10
10
  - **CONCEPTUAL-SCHEMA.md** — проектирование и ревью концептуальных схем.
11
11
  - **CONSTITUENTA.md** — структура и правила конституент.
12
- - **SYNTAX.md** — операторы, кванторы, функции и примеры выражений.
12
+ - **SYNTAX.md** — синтаксис RSLang: операторы, генераторы `D{}`/`I{}`/`R{}`, кванторы, `F#`/`P#`.
13
13
  - **TYPIFICATION.md** — типизация (`AnalysisResult.type`, `valueClass`).
14
14
  - **MODEL-TESTING.md** — проверка семантики определений на маленьких концептуальных моделях.
15
15
  - **DIAGNOSTICS.md** — диагностики анализа и способы исправления ошибок.
16
16
  - **PORTAL-API.md** — объекты REST API Portal.
17
- - **GRAMMAR-REF.md** — краткая карта токенов и приоритетов.
18
17
 
19
18
  Контракт агента `rstool` и примеры — `../skills/rstool-helper/REFERENCE.md`, `EXAMPLES.md` (на русском, вместе с `GUIDE.md`).
package/docs/SYNTAX.md CHANGED
@@ -1,14 +1,16 @@
1
1
  # Синтаксис RSLang
2
2
 
3
- Читай, когда строишь или исправляешь `definitionFormal`. Токены и приоритеты — в `GRAMMAR-REF.md`, типизация — в `TYPIFICATION.md`.
3
+ Единая справка для агента: читай при построении или исправлении `definitionFormal`. Типизация — `TYPIFICATION.md`; ошибки — `DIAGNOSTICS.md`.
4
4
 
5
5
  ## Имена и литералы
6
6
 
7
- - Глобальные алиасы: `X1`, `C2`, `S3`, `D11`, `F7`, `P4`, `A6`, `T9`; буква совпадает с ролью.
8
- - Радикалы: `R1`, `R2` — шаблонные ступени в параметрах.
7
+ - Глобальные алиасы: `X1`, `C2`, `S3`, `D11`, `F7`, `P4`, `A6`, `T9`; буква совпадает с ролью конституенты.
8
+ - Радикалы: `R1`, `R2` — шаблонные ступени в параметрах. Не путать с префиксом рекурсии `R{…}`.
9
9
  - Локальные переменные: `x`, `ξ`, `μ2`, `y1`.
10
10
  - Целые: `0`, `42`; отрицательного литерала нет, пиши `0 - 5`.
11
11
  - `Z` — множество целых, `∅` — пустое множество с типизацией `ℬ(R0)`.
12
+ - Скобки и разделители: `()`, `[]`, `{}`, `,`, `;`, `|`.
13
+ - Комментариев в формальных выражениях нет.
12
14
 
13
15
  ## Теоретико-множественные выражения (STE)
14
16
 
@@ -25,6 +27,79 @@
25
27
 
26
28
  Мультииндексы разрешены: `pr1,3(...)`, `Pr2,4(S1)`, `Fi1,2[D1](S1)`.
27
29
 
30
+ ## Генераторы: `D{}`, `I{}`, `R{}`
31
+
32
+ Три конструкции строят STE. Буквы `D`, `I`, `R` перед `{` — **часть синтаксиса**, не алиасы конституент.
33
+
34
+ | Конструкция | Результат | Когда использовать |
35
+ | :---------- | :------------------------ | :---------------------------------------------------------------------------- |
36
+ | `D{…}` | множество `ℬ(H)` | отбор по условию из уже заданного множества (родо-видовое определение) |
37
+ | `I{…}` | множество `ℬ(H)` | то же множество, но через последовательность переборов, присвоений и проверок |
38
+ | `R{…}` | одно значение ступени `H` | итеративный пересчёт до выхода или стабилизации |
39
+
40
+ ### Декларативная `D{переменная ∈ домен | условие}`
41
+
42
+ Схема ограниченного выделения: перебирает `домен`, включает в результат каждый элемент (или кортеж), для которого `условие` истинно.
43
+
44
+ ```text
45
+ D{ξ∈D1 | LE(ξ)}
46
+ D{(ξ1, ξ2)∈S1 | LE(ξ1, ξ2)}
47
+ {ξ∈D1 | LE(ξ)} — краткая форма без префикса D, только одна переменная
48
+ ```
49
+
50
+ - Слева от `|` — объявление переменной и домен (`∈`, не `:∈`).
51
+ - Справа — логическое выражение (`LE`).
52
+ - Типизация результата: `ℬ(H)`, где `H` — ступень элементов домена.
53
+ - Кортеж в объявлении требует префикса `D`: `D{(a, b)∈X1 | …}`.
54
+ - Пример: `D{ξ∈{1, 2, 3, 4, 5, 6} | ∃σ∈{10, 11, 12} σ = 2 * ξ}` → `{5, 6}`.
55
+
56
+ ### Императивная `I{элемент | блоки через ;}`
57
+
58
+ Строит множество перебором и присвоениями. Эквивалентна декларативной, но удобна, когда значения зависят от предыдущих шагов.
59
+
60
+ ```text
61
+ I{(ξ1, ξ2) | ξ1:∈D1; ξ2:=F1[ξ1]; LE(ξ1, ξ2)}
62
+ I{β | δ1:=Fi1,2[α, α](σ); δ2:=δ1\Pr1,1(δ1); β:=Pr1(δ2)\Pr2(δ2)}
63
+ ```
64
+
65
+ Слева от `|` — STE, задающее элемент результата (часто кортеж локальных переменных).
66
+
67
+ Справа — блоки через `;`. Три вида блока:
68
+
69
+ | Блок | Синтаксис | Смысл |
70
+ | :--------- | :-------- | :--------------------------------------------------------------- |
71
+ | Перебор | `ξ:∈STE` | `ξ` (или кортеж) перебирает элементы множества |
72
+ | Присвоение | `ξ:=STE` | `ξ` получает вычисленное значение |
73
+ | Проверка | `LE` | при ложности дальнейшие блоки пропускаются, перебор продолжается |
74
+
75
+ - Префикс `I` обязателен; в переборе — `:∈`, не `∈`.
76
+ - Типизация результата: `ℬ(H)`, где `H` — ступень выражения слева от `|`.
77
+ - Пример: `I{(ξ1, ξ2) | ξ1:∈{1, 2, 3}; ξ2:=ξ1+1; ∃σ∈{4, 5, 6} σ=2*ξ2}` → `{(1, 2), (2, 3)}`.
78
+
79
+ ### Рекурсивная `R{переменная := база | условие продолжения | формула следующего шага}`
80
+
81
+ Итеративно пересчитывает переменную рекурсии; возвращает **одно значение**, не множество.
82
+
83
+ ```text
84
+ R{ξ := STE1 | STE2(ξ)} — короткая форма
85
+ R{ξ := STE1 | LE(ξ) | STE2(ξ)} — полная форма с условием продолжения
86
+ R{(ξ, σ) := (STE1, STE2) | LE(ξ, σ) | (STE3, STE4)}
87
+ ```
88
+
89
+ | Часть | Позиция | Смысл |
90
+ | :------------------ | :------------------ | :---------------------------------------------------------------- |
91
+ | База | `переменная := STE` | начальное значение |
92
+ | Условие продолжения | `LE` (опционально) | пересчитывается на каждом шаге; при ложности цикл останавливается |
93
+ | Пересчёт | последний `STE` | новое значение переменной на следующем шаге |
94
+
95
+ Порядок шага: присвоить текущее значение → (если есть) проверить условие → вычислить пересчёт.
96
+
97
+ Завершение: условие продолжения ложно, либо значение на шаге `k` равно значению на шаге `k+1` (в том числе в короткой форме без `LE`).
98
+
99
+ - Префикс `R` обязателен; в присвоении — `:=`.
100
+ - Типизация результата совпадает со ступенью переменной рекурсии; пересчёт должен иметь ту же ступень.
101
+ - Пример: `R{(ξ, σ) := (1, 0) | σ<5 | (2*ξ, σ+1)}` → `32`.
102
+
28
103
  ## Логические выражения (LE)
29
104
 
30
105
  - Предикаты множеств: `ξ ∈ S`, `ξ ∉ S`, `S1 = S2`, `S1 ≠ S2`, `S1 ⊆ S2`, `S1 ⊂ S2`, `S1 ⊄ S2`.
@@ -56,7 +131,7 @@ P1 ::= [α1∈STE1, α2∈STE2(α1)] LE(α1, α2)
56
131
  - В `[]` идут параметры через `∈`.
57
132
  - Параметр доступен в следующих доменах и теле.
58
133
  - Вызов позиционный: `F1[ξ1, S1]`, `P1[ξ1\ξ2, ξ3]`.
59
- - `F#` возвращает теоретико-множественное выражение, `P#` — логическое.
134
+ - `F#` возвращает STE, `P#` — LE.
60
135
 
61
136
  ## Радикалы
62
137
 
@@ -76,9 +151,36 @@ F2 ::= [α1∈R1×R2, α2∈R1] α2 = pr1(α1)
76
151
  - `(4 + 5) * 3`, `card(X1) > 5`
77
152
  - `pr2((5, 4, 3, 2, 1)) = 4`
78
153
  - `red({{1, 2, 3}, {3, 4}}) = {1, 2, 3, 4}`
154
+ - `D{ξ∈σ | card(ξ) > 2}`
155
+ - `I{(ξ1, ξ2) | ξ1:∈Pr1(σ); ξ2:∈Pr2(Fi1[{ξ1}](σ))}`
156
+ - `R{ξ:=Pr2(Fi1[α](σ)) | ξ ∪ Pr2(Fi1[ξ](σ))}`
79
157
 
80
158
  ## Корректность
81
159
 
82
160
  - Анализ идет в глобальном контексте: все алиасы должны быть известны и типизированы.
83
161
  - Формальные определения должны быть биективно переносимыми (гарантируется семантическим анализатором).
84
162
  - Логическая непротиворечивость проверяется примером интерпретации в модели.
163
+
164
+ ## Приоритеты операторов
165
+
166
+ От высшего к низшему:
167
+
168
+ 1. Вызовы функций, проекции, `ℬ`, `bool`, `debool`, `red`, `card`.
169
+ 2. `×`.
170
+ 3. `*`.
171
+ 4. `+`, `-`.
172
+ 5. `∪`, `∩`, `\`, `∆`.
173
+ 6. Предикаты: `∈`, `=`, `<`, …
174
+ 7. `¬`.
175
+ 8. `&`.
176
+ 9. `∨`.
177
+ 10. `⇒`.
178
+ 11. `⇔`.
179
+
180
+ ## Исходники парсера
181
+
182
+ Читай, если позиция ошибки неожиданная или нужны Lezer terms / token IDs:
183
+
184
+ - `@rsconcept/domain/src/rslang/parser/rslang.grammar`
185
+ - `@rsconcept/domain/src/rslang/parser/token.ts`
186
+ - `@rsconcept/domain/src/rslang/parser/parser.terms.ts`
@@ -4,21 +4,13 @@
4
4
 
5
5
  ## Как запускать
6
6
 
7
- **Из checkout репозитория** (`rsconcept/rstool`):
8
-
9
- ```bash
10
- npm install
11
- npm run build # обёртка для скриптов
12
- npm run example:client # минимальный цикл API; схемы — см. таблицу ниже
13
- ```
14
-
15
- **После `npm install @rsconcept/rstool`** (нужен `tsx` или аналог):
7
+ После `npm install @rsconcept/rstool` (нужен `tsx` или аналог):
16
8
 
17
9
  ```bash
18
10
  npx tsx node_modules/@rsconcept/rstool/examples/agent-client.ts
19
11
  ```
20
12
 
21
- Скрипты пишут JSON в `examples/<topic>/`; запускайте из корня пакета (каталог с `package.json` rstool).
13
+ Скрипты пишут JSON в `examples/<topic>/` рядом с собой. Запускайте из каталога, где установлен пакет.
22
14
 
23
15
  ## Макет папки темы
24
16
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rsconcept/rstool",
3
- "version": "1.0.3",
3
+ "version": "1.1.1",
4
4
  "description": "Agent-facing library for incremental RSForm construction, RSLang analysis, diagnostics, modeling, and evaluation. Wraps @rsconcept/domain with a deterministic session contract.",
5
5
  "license": "MIT",
6
6
  "author": "IRBorisov",
@@ -71,9 +71,7 @@ const session = tool.importData(portalDetailsJsonString);
71
71
  ```ts
72
72
  import { RSToolWrapperClient } from '@rsconcept/rstool/wrapper';
73
73
 
74
- // Из checkout rstool: по умолчанию запускает `npm run wrapper` в текущем cwd.
75
- // Для установленного пакета: new RSToolWrapperClient({ command: 'npx', args: ['rstool-wrapper'] }).
76
- const client = new RSToolWrapperClient();
74
+ const client = new RSToolWrapperClient({ command: 'npx', args: ['rstool-wrapper'] });
77
75
  await client.waitUntilReady();
78
76
 
79
77
  await client.call('applySchemaPatch', {
@@ -29,13 +29,12 @@
29
29
  - Термины предметной области: [../../docs/DOMAIN.md](../../docs/DOMAIN.md).
30
30
  - Концептуализация, создание схемы: [../../docs/CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md).
31
31
  - Конституенты и валидация: [../../docs/CONSTITUENTA.md](../../docs/CONSTITUENTA.md).
32
- - Синтаксис: [../../docs/SYNTAX.md](../../docs/SYNTAX.md).
32
+ - Синтаксис родов структур: [../../docs/SYNTAX.md](../../docs/SYNTAX.md).
33
33
  - Типизация: [../../docs/TYPIFICATION.md](../../docs/TYPIFICATION.md).
34
34
  - Проверка определений на КМ: [../../docs/MODEL-TESTING.md](../../docs/MODEL-TESTING.md).
35
35
  - Диагностики: [../../docs/DIAGNOSTICS.md](../../docs/DIAGNOSTICS.md).
36
- - Грамматика: [../../docs/GRAMMAR-REF.md](../../docs/GRAMMAR-REF.md).
37
36
  - REST Portal: [../../docs/PORTAL-API.md](../../docs/PORTAL-API.md).
38
- - Репозиторий Portal (исходники, API, nginx): [ConceptPortal на GitHub](https://github.com/IRBorisov/ConceptPortal) — карта путей в [PORTAL-API.md](../../docs/PORTAL-API.md#репозиторий-portal).
37
+ - Репозиторий Portal (исходники, API, nginx): [ConceptPortal на GitHub](https://github.com/IRBorisov/ConceptPortal).
39
38
 
40
39
  ## Воркфлоу
41
40
 
@@ -73,15 +72,15 @@ auto определит `portal-details` или `portal-schema`. Явный kind
73
72
  Когда нужно построить или существенно развить КС по тексту ПО, требованиям или предметному описанию. Правила редукции, слоёв и паттернов — [CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md).
74
73
 
75
74
  1. Собери словарь: базовые понятия, ключевые отношения, сценарий синтеза.
76
- 2. Добавь `X#`, `C#` с конвенциями из источника (не копируй дословно).
77
- 3. Добавь базовые `S#`: трансформация, перевод, допускание, выбор, цели, субъекты.
78
- 4. Проверь независимость базовых понятий — они не выводятся друг из друга.
79
- 5. Добавь `A#` на структуры: `card`, покрытие `Pr1,2(S#)=…`, принадлежность выбора.
80
- 6. Введи `F#` для типовых запросов.
81
- 7. Производные понятия строй через `Pr*`, `Fi*`, `F#` от центрального `D#` и базовых `S#`.
82
- 8. Перед каждым patch — `analyzeExpression`; при ошибках — [цикл диагностик](#цикл-диагностик).
83
- 9. Сомнительную семантику проверь на маленькой КМ ([цикл КМ](#проверка-на-маленькой-км), [MODEL-TESTING.md](../../docs/MODEL-TESTING.md)).
84
- 10. Перед показом результата пройди [чеклист ревью КС](#ревью-концептуальной-схемы).
75
+ 2. Добавь неопределяемые понятия `X#`, `C#`, `S#` с конвенциями из источника (не копируй дословно).
76
+ 3. Проверь независимость базовых понятий — они не выводятся друг из друга.
77
+ Если отношение или множество выражается через уже введенные `X#`, `C#`, `S#`, оформляй его как `D#` / `F#` / `P#`.
78
+ 4. Введи `F#` и `D#` для раскрытия проекций и функциональных связей в базовых понятиях.
79
+ 5. Добавь `A#` на структуры, выражающие ограничения предметной области. Возможно стоит ввести промежуточные производные термы и терм-функции.
80
+ 6. Подбери промежуточные производные понятия `D#`, `F#`, `P#` так, чтобы выразить целевые понятия без использования не введенных в схеме понятий.
81
+ 7. Перед каждым patch — `analyzeExpression`; при ошибках — [цикл диагностик](#цикл-диагностик).
82
+ 8. Сомнительную семантику проверь на маленькой КМ ([цикл КМ](#проверка-на-маленькой-км), [MODEL-TESTING.md](../../docs/MODEL-TESTING.md)).
83
+ 9. Перед показом результата пройди [чеклист ревью КС](#ревью-концептуальной-схемы).
85
84
 
86
85
  Дальше — обычное [редактирование и проверка](#редактирование-и-проверка-схемы): commit, export.
87
86
 
@@ -111,10 +110,10 @@ auto определит `portal-details` или `portal-schema`. Явный kind
111
110
 
112
111
  ### Порядок объявления конституент
113
112
 
114
- 1. `basic`, `constant`.
115
- 2. Базовые структуры и ключевые понятия.
116
- 3. Производные конституенты в топологическом порядке.
117
- 4. Аксиомы и утверждения после всех ссылок.
113
+ 1. В начале схемы — `basic`, `constant`.
114
+ 2. Родовые структуры производные и ключевые понятия, аксиомы и утверждения в произвольном порядке.
115
+ 3. Конституенты в топологическом порядке.
116
+ 4. Предпочитай размещать связанные с родовыми структурами конституенты вместе с этой структурой.
118
117
 
119
118
  Правила валидации по типам — [CONSTITUENTA.md](../../docs/CONSTITUENTA.md).
120
119
 
@@ -124,23 +123,49 @@ auto определит `portal-details` или `portal-schema`. Явный kind
124
123
 
125
124
  - что изменено в схеме или модели;
126
125
  - есть ли активные диагностики;
127
- - какой экспорт получен: session / Portal schema / Portal model;
128
- - какие проверки выполнены: analyze / evaluate / recalculate / tests.
126
+ - какой экспорт получен: сессия / схема для Portal / модель для Portal;
127
+ - какие проверки выполнены: анализ выражений / вычисление / пересчёт модели / тесты.
129
128
 
130
129
  Не вставляй большой JSON в чат без запроса пользователя.
131
130
 
131
+ ### Язык ответа
132
+
133
+ С пользователем говори на языке предметной области, а не контракта API. Английские идентификаторы (`definitionFormal`, `applySchemaPatch`, `cstType`...) уместны только в коде, patch-ах, JSON и при обсуждении самого API. В обычном тексте заменяй их терминами (полный словарь — [DOMAIN.md](../../docs/DOMAIN.md)):
134
+
135
+ | В API | В тексте ответа |
136
+ | :-------------------------------- | :---------------------------------- |
137
+ | `alias` | имя конституенты |
138
+ | `cstType` | тип конституенты |
139
+ | `definitionFormal` | формальное определение (формула) |
140
+ | `term` | термин |
141
+ | `definitionText` | текстовое определение |
142
+ | `convention` | конвенция |
143
+ | `comment` | комментарий |
144
+ | `applySchemaPatch` | правка схемы |
145
+ | `analyzeExpression` | проверка / анализ выражения |
146
+ | `listDiagnostics`, `diagnostics` | диагностики |
147
+ | `setModelValues`, `getModelState` | интерпретация, значения модели |
148
+ | `evaluate`, `recalculateModel` | вычисление, пересчёт модели |
149
+ | `commitStep`, `commitMessage` | фиксация шага (ревизия) |
150
+ | `exportSession` / `exportPortal` | экспорт сессии / экспорт для Portal |
151
+ | `importData` | импорт данных |
152
+ | session, `sessionId` | сессия |
153
+
154
+ Имена конституент (`X1`, `S2`, `D3`) и формулы RSLang — часть схемы, их приводи как есть; лучше вместе с термином: «терм `D3` (родитель)». Названия методов упоминай, только если пользователь спрашивает про rstool как инструмент.
155
+
132
156
  ## Чеклисты
133
157
 
134
158
  ### Сессия и rstool
135
159
 
136
160
  - [ ] Используется текущая сессия (`getSessionState`) или явный `sessionId`, если сессий несколько.
137
- - [ ] Для стандартных alias `X/C/S/D/A/F/P` можно доверить `cstType` `applySchemaPatch`; нестандартные alias передаются с явным `cstType`.
161
+ - [ ] Для стандартных alias `X/C/S/D/A/F/P` можно не указывать `cstType` в `applySchemaPatch`.
138
162
  - [ ] Для пачки конституент предпочитай один `applySchemaPatch` с массивом `items`.
139
163
 
140
164
  ### Перед показом, commit и export
141
165
 
142
166
  - [ ] Схема проверена; ошибки исправлены.
143
- - [ ] Диагностики обработаны до `commitStep` и экспорта.
167
+ - [ ] Диагностики обработаны до фиксации шага и экспорта.
168
+ - [ ] В тексте ответа нет английских имён полей и методов API — использованы термины из раздела [Язык ответа](#язык-ответа).
144
169
 
145
170
  ### Ревью концептуальной схемы
146
171
 
@@ -148,7 +173,7 @@ auto определит `portal-details` или `portal-schema`. Явный kind
148
173
 
149
174
  - [ ] Атрибутивная и родоструктурная экспликации не смешаны без явного запроса.
150
175
  - [ ] Нет избыточной проверки принадлежности к собственной типизации (`x∈X1`, если `x` уже в `X1`).
151
- - [ ] Базовые понятия независимы, введены необходимые по смысле аксиомы.
176
+ - [ ] Базовые понятия и `S#` независимы; вычислимые отношения вынесены в `D#` / `F#` / `P#`, а не объявлены новыми структурами.
152
177
  - [ ] Покрыты главные сущности, роли, отношения, утверждения.
153
178
  - [ ] В текстовых определениях используются только понятия из схемы.
154
179
  - [ ] Повторяющиеся части формальных определений вынесены в производные понятия `D#` и `F#`.
@@ -1,36 +1,40 @@
1
1
  ---
2
2
  name: rstool-helper
3
3
  description: >-
4
- RS language, formal definitions and conceptual schema design for agents. Read GUIDE and docs from node_modules.
4
+ RSLang, формальные определения и проектирование концептуальных схем для агентов. Читай GUIDE и docs из node_modules.
5
5
  ---
6
6
 
7
7
  # rstool-helper
8
8
 
9
- Thin **entry** skill. Full guide and docs stay in the package — use the Read tool on the paths below (from the project root).
9
+ Тонкий **входной** skill. Полный гайд и документация остаются в пакете — читай через Read tool по путям ниже (от корня проекта).
10
10
 
11
- ## If the entry skill is not installed yet
11
+ ## Если входной skill ещё не установлен
12
12
 
13
- The user ran `npm install @rsconcept/rstool` but has not registered the agent skill in the project. **Run the install procedure** in:
13
+ Пользователь выполнил `npm install @rsconcept/rstool`, но не зарегистрировал agent skill в проекте. **Выполни процедуру установки** из:
14
14
 
15
15
  `node_modules/@rsconcept/rstool/skills/INSTALL.md`
16
16
 
17
- Then continue with the canonical files below.
17
+ Затем продолжай с каноническими файлами ниже.
18
18
 
19
- ## Canonical files (read before rstool work)
19
+ ## Канонические файлы (читать перед работой с rstool)
20
20
 
21
- - **Start here** — воркфлоу и чеклисты: `node_modules/@rsconcept/rstool/skills/rstool-helper/GUIDE.md`
21
+ - **Начни здесь** — воркфлоу и чеклисты: `node_modules/@rsconcept/rstool/skills/rstool-helper/GUIDE.md`
22
22
  - API, stdio, контракт: `node_modules/@rsconcept/rstool/skills/rstool-helper/REFERENCE.md`
23
23
  - Примеры, типичные ошибки: `node_modules/@rsconcept/rstool/skills/rstool-helper/EXAMPLES.md`
24
- - Language / domain docs: `node_modules/@rsconcept/rstool/docs/*.md`
25
- - Install procedure: `node_modules/@rsconcept/rstool/skills/INSTALL.md`
24
+ - Язык и предметная область: `node_modules/@rsconcept/rstool/docs/*.md`
25
+ - Процедура установки: `node_modules/@rsconcept/rstool/skills/INSTALL.md`
26
26
 
27
- Always open **GUIDE.md** first when starting a rstool task, then **REFERENCE.md** / **EXAMPLES.md** / relevant `docs/*.md` as needed.
27
+ Перед началом задачи rstool всегда открывай **GUIDE.md**, затем по необходимости **REFERENCE.md** / **EXAMPLES.md** / нужные `docs/*.md`.
28
+
29
+ ## Язык ответа пользователю
30
+
31
+ В тексте для пользователя используй термины предметной области («формальное определение», «конституента», «диагностики»), а не английские имена полей и методов API (`definitionFormal`, `applySchemaPatch`). Идентификаторы API — только в коде, patch-ах и JSON. Словарь соответствий — раздел «Язык ответа» в GUIDE.md.
28
32
 
29
33
  ## Portal (приложение)
30
34
 
31
- Репозиторий: [github.com/IRBorisov/ConceptPortal](https://github.com/IRBorisov/ConceptPortal). REST и curl — `node_modules/@rsconcept/rstool/docs/PORTAL-API.md`; карта путей в исходниках — раздел «Репозиторий Portal» в том же файле.
35
+ REST API и curl — `node_modules/@rsconcept/rstool/docs/PORTAL-API.md`.
32
36
 
33
- ## Quick facts
37
+ ## Кратко
34
38
 
35
- - Package: `@rsconcept/rstool`; wrapper: `npx rstool-wrapper`
36
- - `@rsconcept/domain` is installed as a dependency (analyzer, errors in `src/rslang/error.ts`)
39
+ - Пакет: `@rsconcept/rstool`; обёртка: `npx rstool-wrapper`
40
+ - `@rsconcept/domain` устанавливается как зависимость (анализатор и коды ошибок)
@@ -1,47 +0,0 @@
1
- # Грамматика: короткая карта
2
-
3
- Этого обычно достаточно агенту. Полная грамматика живет в `@rsconcept/domain`.
4
-
5
- ## Токены
6
-
7
- - Литералы: `0`, `42`, `Z`, `∅`.
8
- - Алиасы: `X#`, `C#`, `S#`, `D#`, `F#`, `P#`, `A#`, `T#`, `R#`.
9
- - Локальные переменные: `x`, `ξ`, `μ2`, `y1`.
10
- - Скобки и разделители: `()`, `[]`, `{}`, `,`, `;`.
11
- - Комментариев в формальных выражениях нет.
12
-
13
- ## Операторы
14
-
15
- - Множества: `∪`, `∩`, `\`, `∆`, `×`, `ℬ`.
16
- - Структуры: `red`, `bool`, `debool`, `pr1`, `Pr1`, `Fi1[D](S)`, `card`.
17
- - Предикаты: `∈`, `∉`, `⊆`, `⊂`, `⊄`, `=`, `≠`, `<`, `≤`, `>`, `≥`.
18
- - Связки: `¬`, `&`, `∨`, `⇒`, `⇔`.
19
- - Кванторы: `∀`, `∃`.
20
-
21
- Мультииндексы парсятся как список натуральных чисел: `pr1,3`, `Pr2,4`, `Fi1,2[D](S)`.
22
-
23
- ## Декларации
24
-
25
- - Терм-функция: `F# ::= [<params>] <body STE>`.
26
- - Предикат-функция: `P# ::= [<params>] <body LE>`.
27
- - Параметр: `α ∈ <STE>`.
28
- - Вызов: `F#[<arg1>, <arg2>]`.
29
-
30
- ## Приоритеты
31
-
32
- 1. Вызовы функций, проекции, `ℬ`, `bool`, `debool`, `red`, `card`.
33
- 2. `×`.
34
- 3. `*`.
35
- 4. `+`, `-`.
36
- 5. `∪`, `∩`, `\`, `∆`.
37
- 6. Предикаты: `∈`, `=`, `<`, ...
38
- 7. `¬`.
39
- 8. `&`.
40
- 9. `∨`.
41
- 10. `⇒`.
42
- 11. `⇔`.
43
-
44
- ## Когда читать исходники
45
-
46
- - Позиция ошибки неожиданная.
47
- - Нужны Lezer terms/token IDs: `@rsconcept/domain/src/rslang/parser/token.ts`, `parser.terms.ts`.