@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 +16 -17
- package/docs/CONCEPTUAL-SCHEMA.md +50 -68
- package/docs/CONSTITUENTA.md +0 -2
- package/docs/DIAGNOSTICS.md +1 -5
- package/docs/DOMAIN.md +9 -1
- package/docs/MODEL-TESTING.md +7 -10
- package/docs/README.md +5 -3
- package/package.json +1 -1
- package/skills/README.md +3 -3
- package/skills/rstool-helper/EXAMPLES.md +47 -117
- package/skills/rstool-helper/GUIDE.md +107 -53
- package/skills/rstool-helper/REFERENCE.md +108 -114
- package/skills/rstool-helper/SKILL.md +5 -7
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
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
31
|
+
## Базовые понятия
|
|
19
32
|
|
|
20
|
-
|
|
33
|
+
`X#`, `C#`, и `S#` — это базовые понятия, их нельзя строить одно из другого и включать друг в друга как элементы или подмножества.
|
|
34
|
+
Если такое возникает — значит есть скрытое отношение, его нужно явно оформить отдельной производной конституентой.
|
|
35
|
+
Если базисные множества пересекаются по интерпретации или набор констант показывает какой-то атрибут — отсутствует нужное отношение, его надо ввести.
|
|
21
36
|
|
|
22
37
|
## Родовые структуры
|
|
23
38
|
|
|
24
|
-
`S#` — родовая структура.
|
|
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
|
-
|
|
48
|
+
Повторяется `Pr2(Fi1[...](...))` или похожая цепочка -> введи промежуточный `D#` или `F#`.
|
|
34
49
|
|
|
35
|
-
##
|
|
50
|
+
## Relation-first
|
|
36
51
|
|
|
37
|
-
|
|
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
|
-
|
|
75
|
+
Имена и арность зависят от предметной области. Важна форма: кортеж + ограничения через уже введенные `F#` и `S#`.
|
|
63
76
|
|
|
64
|
-
|
|
77
|
+
Части кортежа называй через `D# := Pr#(D13)`.
|
|
65
78
|
|
|
66
|
-
|
|
79
|
+
## Инварианты
|
|
67
80
|
|
|
68
|
-
Для функциональности отношения
|
|
81
|
+
Для функциональности отношения предпочитай `card`:
|
|
69
82
|
|
|
70
83
|
```text
|
|
71
84
|
card(S1) = card(Pr1,2(S1))
|
|
72
85
|
```
|
|
73
86
|
|
|
74
|
-
|
|
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[ξ] = …}
|
|
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
|
-
|
|
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` от уже введенного отношения.
|
package/docs/CONSTITUENTA.md
CHANGED
|
@@ -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`.
|
package/docs/DIAGNOSTICS.md
CHANGED
|
@@ -78,8 +78,4 @@
|
|
|
78
78
|
|
|
79
79
|
## Цикл исправления
|
|
80
80
|
|
|
81
|
-
|
|
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#` — **терм-функция**: параметризованный терм.
|
package/docs/MODEL-TESTING.md
CHANGED
|
@@ -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
|
-
{
|
|
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`
|
|
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.
|
|
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`:
|
|
10
|
-
- `rstool-helper/REFERENCE.md`: API, stdio,
|
|
11
|
-
- `rstool-helper/EXAMPLES.md`:
|
|
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
|
|
1
|
+
# Примеры rstool
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Короткие примеры для агентов. Полные скрипты — `../../examples/`. Воркфлоу — [GUIDE.md](GUIDE.md).
|
|
4
4
|
|
|
5
|
-
##
|
|
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: '
|
|
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
|
-
##
|
|
34
|
+
## Анализ перед upsert
|
|
37
35
|
|
|
38
|
-
|
|
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
|
-
|
|
52
|
-
|
|
53
|
-
## Wrapper Client
|
|
49
|
+
Исправь диапазон `from` / `to` из отчёта и повтори анализ. При необходимости пересмотри определение целиком или разбей на несколько конституент.
|
|
54
50
|
|
|
55
|
-
|
|
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
|
-
|
|
67
|
+
Для сохранённых определений задай значения `basic`, `constant` и `structure`, затем вызови `evaluateConstituenta` или `recalculateModel`.
|
|
121
68
|
|
|
122
|
-
##
|
|
69
|
+
## Семантический smoke-тест
|
|
123
70
|
|
|
124
|
-
|
|
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(
|
|
106
|
+
throw new Error(`Ожидалось Pr1(S1) = первая координата; получено ${JSON.stringify(result)}`);
|
|
160
107
|
}
|
|
161
108
|
```
|
|
162
109
|
|
|
163
|
-
|
|
110
|
+
Подробнее: `../../docs/MODEL-TESTING.md`.
|
|
111
|
+
|
|
112
|
+
## Клиент обёртки
|
|
164
113
|
|
|
165
|
-
|
|
114
|
+
Когда агент общается с отдельным процессом `rstool-wrapper`.
|
|
166
115
|
|
|
167
|
-
|
|
116
|
+
```ts
|
|
117
|
+
import { CstType } from '@rsconcept/rstool';
|
|
118
|
+
import { RSToolWrapperClient } from '@rsconcept/rstool/wrapper';
|
|
168
119
|
|
|
169
|
-
|
|
120
|
+
const client = new RSToolWrapperClient();
|
|
121
|
+
await client.waitUntilReady();
|
|
170
122
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
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
|
-
|
|
132
|
+
const diagnostics = await client.call('listDiagnostics', { sessionId });
|
|
133
|
+
console.log(diagnostics);
|
|
179
134
|
|
|
180
|
-
|
|
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
|
-
|
|
138
|
+
Ручной stdio — один JSON-запрос на строку:
|
|
188
139
|
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
|
|
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
|
-
|
|
145
|
+
## Экспорт / импорт
|
|
195
146
|
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
|
|
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
|
-
|
|
152
|
+
Экспорт включает состояние сессии и значения модели.
|
|
203
153
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
154
|
+
Файлы для загрузки пользователем в существующий объект Portal:
|
|
155
|
+
|
|
156
|
+
```ts
|
|
157
|
+
const schemaJson = tool.exportPortalSchema(sessionId);
|
|
158
|
+
const modelJson = tool.exportPortalModel(sessionId);
|
|
207
159
|
```
|
|
208
160
|
|
|
209
|
-
|
|
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
|
-
#
|
|
1
|
+
# RSLang и rstool
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Краткий входной гайд для агентов. Детали — в связанных документах.
|
|
4
4
|
|
|
5
|
-
**RSLang**
|
|
5
|
+
**RSLang** — формальная нотация концептуальных схем: понятия, отношения, операции, утверждения. Основа: принадлежность `x∈y`, теоретико-множественные и логические выражения, типизация.
|
|
6
6
|
|
|
7
|
-
**rstool**
|
|
7
|
+
**rstool** — API агента для сессий, upsert, анализа, диагностик, значений модели, вычисления, экспорта/импорта.
|
|
8
8
|
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
- Stdio
|
|
12
|
-
- Node
|
|
9
|
+
- Библиотека: `@rsconcept/rstool`.
|
|
10
|
+
- Анализатор: `@rsconcept/domain`.
|
|
11
|
+
- Stdio-обёртка: `npx rstool-wrapper`, JSON построчно.
|
|
12
|
+
- Node-клиент: `RSToolWrapperClient`.
|
|
13
13
|
|
|
14
|
-
##
|
|
14
|
+
## Что читать
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
Пути — относительно этого файла.
|
|
17
17
|
|
|
18
|
-
- API,
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
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
|
-
##
|
|
30
|
+
## Воркфлоу
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
Все пошаговые сценарии собраны здесь. Справочные документы дают правила и детали.
|
|
33
33
|
|
|
34
|
-
|
|
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
|
-
|
|
36
|
+
Когда схема уже есть и нужны точечные правки, новые конституенты или проверка формул.
|
|
47
37
|
|
|
48
|
-
1.
|
|
49
|
-
2.
|
|
50
|
-
3.
|
|
51
|
-
4.
|
|
52
|
-
5.
|
|
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
|
-
|
|
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.
|
|
58
|
-
3.
|
|
59
|
-
4.
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
- [ ]
|
|
68
|
-
- [ ]
|
|
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
|
-
#
|
|
2
|
-
|
|
3
|
-
## rstool
|
|
4
|
-
|
|
5
|
-
-
|
|
6
|
-
-
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
|
|
10
|
-
###
|
|
11
|
-
|
|
12
|
-
|
|
|
13
|
-
| ----------------------------------------------------------- |
|
|
14
|
-
| `createSession(initial?)` |
|
|
15
|
-
| `addOrUpdateConstituenta(sessionId, { draft })` |
|
|
16
|
-
| `analyzeExpression(sessionId, { expression, cstType })` |
|
|
17
|
-
| `getFormState(sessionId)` |
|
|
18
|
-
| `listDiagnostics(sessionId, filters?)` |
|
|
19
|
-
| `commitStep(sessionId, message?)` |
|
|
20
|
-
| `exportSession(sessionId)` | JSON
|
|
21
|
-
| `exportPortalSchema(sessionId)` |
|
|
22
|
-
| `exportPortalModel(sessionId)` |
|
|
23
|
-
| `importSession(payload)` |
|
|
24
|
-
| `setConstituentaValue(sessionId, { target, type?, value })` |
|
|
25
|
-
| `setConstituentaValues(sessionId, { items })` |
|
|
26
|
-
| `clearConstituentaValues(sessionId, { items })` |
|
|
27
|
-
| `getModelState(sessionId)` |
|
|
28
|
-
| `evaluateExpression(sessionId, { expression, cstType })` |
|
|
29
|
-
| `evaluateConstituenta(sessionId, { constituentId })` |
|
|
30
|
-
| `recalculateModel(sessionId)` |
|
|
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; //
|
|
37
|
-
alias: string;
|
|
38
|
-
cstType: CstType;
|
|
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
|
-
|
|
46
|
+
Пропущенные текстовые поля в сохранённом состоянии по умолчанию `''`.
|
|
47
47
|
|
|
48
|
-
### `SessionState`
|
|
48
|
+
### Метаданные `SessionState`
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
Задаются в `createSession(initial?)` или через `importSession`:
|
|
51
51
|
|
|
52
52
|
```ts
|
|
53
53
|
{
|
|
54
|
-
alias: string; //
|
|
55
|
-
title: string; //
|
|
56
|
-
comment: string; //
|
|
54
|
+
alias: string; // alias объекта библиотеки
|
|
55
|
+
title: string; // отображаемое название
|
|
56
|
+
comment: string; // заметки разработчика
|
|
57
57
|
}
|
|
58
58
|
```
|
|
59
59
|
|
|
60
|
-
|
|
60
|
+
При опускании все поля по умолчанию `''`.
|
|
61
61
|
|
|
62
|
-
###
|
|
62
|
+
### Типы модели и вычисления
|
|
63
63
|
|
|
64
64
|
```ts
|
|
65
|
-
type RSToolValue = number | RSToolValue[]; //
|
|
66
|
-
type BasicBinding = Record<number, string>; //
|
|
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
|
-
|
|
82
|
+
Привязки `basic`/`constant` используют `type: "basic"` и `value: { "0": "label", … }`. Структурные значения — нормализованная типизация в `type` и вложенные массивы для множеств/кортежей.
|
|
83
83
|
|
|
84
|
-
###
|
|
84
|
+
### Протокол stdio
|
|
85
85
|
|
|
86
|
-
|
|
86
|
+
Процесс: `npx rstool-wrapper`
|
|
87
87
|
|
|
88
|
-
1. **Ready** (
|
|
89
|
-
2.
|
|
90
|
-
3.
|
|
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
|
-
|
|
92
|
+
Дополнительные методы: `ping`, `methods`.
|
|
93
93
|
|
|
94
|
-
|
|
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`:
|
|
111
|
+
`RSToolWrapperClient`: по умолчанию запускает `rstool-wrapper`; методы `waitUntilReady()`, `call(method, params)`, `close()`.
|
|
112
112
|
|
|
113
|
-
###
|
|
113
|
+
### Результат анализа
|
|
114
114
|
|
|
115
115
|
```ts
|
|
116
116
|
interface AnalysisResult {
|
|
117
117
|
success: boolean;
|
|
118
|
-
type: Record<string, unknown> | null;
|
|
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
|
-
##
|
|
124
|
+
## RSLang
|
|
125
125
|
|
|
126
|
-
|
|
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
|
-
|
|
128
|
+
- **Типизация**: структурный тип выражения; ступени включают элементы (`Xi`, `Ci`), `Z`, кортежи `(H1×…×Hn)`, множества `ℬ(H)`, логику `Logic`, параметризованные `Hr 🠔 [H1,…,Hi]`. У `structure` (`S#`) поле `definitionFormal` **задаёт** типизацию. У `term` (`D#`) типизация **выводится** из определения.
|
|
131
129
|
|
|
132
|
-
##
|
|
130
|
+
## Токены грамматики
|
|
133
131
|
|
|
134
|
-
|
|
132
|
+
Из `rslang.grammar`:
|
|
135
133
|
|
|
136
|
-
|
|
|
137
|
-
|
|
|
138
|
-
|
|
|
139
|
-
|
|
|
140
|
-
|
|
|
141
|
-
|
|
|
142
|
-
|
|
|
143
|
-
|
|
|
144
|
-
|
|
|
145
|
-
|
|
|
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
|
-
|
|
145
|
+
Полная грамматика и приоритеты: `docs/GRAMMAR-REF.md`.
|
|
148
146
|
|
|
149
|
-
##
|
|
147
|
+
## Документация
|
|
150
148
|
|
|
151
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
168
|
+
## Коды ошибок
|
|
171
169
|
|
|
172
|
-
|
|
170
|
+
Категории и исправления по коду: `docs/DIAGNOSTICS.md`.
|
|
173
171
|
|
|
174
|
-
|
|
172
|
+
Категории:
|
|
175
173
|
|
|
176
|
-
|
|
174
|
+
- `0x84xx` — синтаксис / разбор
|
|
175
|
+
- `0x28xx` — предупреждения локальных объявлений
|
|
176
|
+
- `0x88xx` — семантика / типы
|
|
177
|
+
- `0x886x` — уровень конституент (пустая производная, запрещённое определение)
|
|
178
|
+
- `0x81xx` — вычисление (runtime; из `evaluateExpression` / `evaluateConstituenta`)
|
|
177
179
|
|
|
178
|
-
|
|
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
|
-
|
|
182
|
+
`exportSession(sessionId)` возвращает JSON-строку `{ contractVersion, state, diagnostics }`.
|
|
185
183
|
|
|
186
|
-
`
|
|
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
|
-
|
|
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
|
-
|
|
191
|
+
Для **Load from JSON** на существующей схеме или модели Portal:
|
|
194
192
|
|
|
195
|
-
|
|
193
|
+
- `exportPortalSchema(sessionId)` — файл схемы
|
|
194
|
+
- `exportPortalModel(sessionId)` — файл модели
|
|
196
195
|
|
|
197
|
-
- `
|
|
198
|
-
- `
|
|
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
|
|
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
|
|
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** —
|
|
24
|
-
- API, stdio,
|
|
25
|
-
-
|
|
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
|
|