@rsconcept/rstool 1.0.3 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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.0",
4
4
  "description": "Agent-facing library for incremental RSForm construction, RSLang analysis, diagnostics, modeling, and evaluation. Wraps @rsconcept/domain with a deterministic session contract.",
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
 
@@ -134,7 +133,7 @@ auto определит `portal-details` или `portal-schema`. Явный kind
134
133
  ### Сессия и rstool
135
134
 
136
135
  - [ ] Используется текущая сессия (`getSessionState`) или явный `sessionId`, если сессий несколько.
137
- - [ ] Для стандартных alias `X/C/S/D/A/F/P` можно доверить `cstType` `applySchemaPatch`; нестандартные alias передаются с явным `cstType`.
136
+ - [ ] Для стандартных alias `X/C/S/D/A/F/P` можно не указывать `cstType` в `applySchemaPatch`.
138
137
  - [ ] Для пачки конституент предпочитай один `applySchemaPatch` с массивом `items`.
139
138
 
140
139
  ### Перед показом, commit и export
@@ -148,7 +147,7 @@ auto определит `portal-details` или `portal-schema`. Явный kind
148
147
 
149
148
  - [ ] Атрибутивная и родоструктурная экспликации не смешаны без явного запроса.
150
149
  - [ ] Нет избыточной проверки принадлежности к собственной типизации (`x∈X1`, если `x` уже в `X1`).
151
- - [ ] Базовые понятия независимы, введены необходимые по смысле аксиомы.
150
+ - [ ] Базовые понятия и `S#` независимы; вычислимые отношения вынесены в `D#` / `F#` / `P#`, а не объявлены новыми структурами.
152
151
  - [ ] Покрыты главные сущности, роли, отношения, утверждения.
153
152
  - [ ] В текстовых определениях используются только понятия из схемы.
154
153
  - [ ] Повторяющиеся части формальных определений вынесены в производные понятия `D#` и `F#`.
@@ -28,9 +28,9 @@ Always open **GUIDE.md** first when starting a rstool task, then **REFERENCE.md*
28
28
 
29
29
  ## Portal (приложение)
30
30
 
31
- Репозиторий: [github.com/IRBorisov/ConceptPortal](https://github.com/IRBorisov/ConceptPortal). REST и curl — `node_modules/@rsconcept/rstool/docs/PORTAL-API.md`; карта путей в исходниках — раздел «Репозиторий Portal» в том же файле.
31
+ REST API и curl — `node_modules/@rsconcept/rstool/docs/PORTAL-API.md`.
32
32
 
33
33
  ## Quick facts
34
34
 
35
35
  - Package: `@rsconcept/rstool`; wrapper: `npx rstool-wrapper`
36
- - `@rsconcept/domain` is installed as a dependency (analyzer, errors in `src/rslang/error.ts`)
36
+ - `@rsconcept/domain` is installed as a dependency (analyzer and error codes)
@@ -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`.