@rsconcept/rstool 0.5.1 → 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/docs/CONCEPTUAL-SCHEMA.md +0 -29
- package/docs/CONSTITUENTA.md +0 -2
- package/docs/DIAGNOSTICS.md +1 -5
- package/docs/MODEL-TESTING.md +0 -9
- package/docs/README.md +4 -2
- package/package.json +1 -1
- package/skills/README.md +3 -3
- package/skills/rstool-helper/EXAMPLES.md +20 -29
- package/skills/rstool-helper/GUIDE.md +103 -49
- package/skills/rstool-helper/REFERENCE.md +105 -107
- package/skills/rstool-helper/SKILL.md +3 -3
|
@@ -96,32 +96,3 @@ card(S1) = card(Pr1,2(S1))
|
|
|
96
96
|
- `card(F[ξ]) = 1`.
|
|
97
97
|
|
|
98
98
|
Перед `D{x∈… | ∃d1∈… ∃d2∈…}` проверь, нельзя ли взять `Pr` от уже введенного отношения.
|
|
99
|
-
|
|
100
|
-
## Проверка на маленькой КМ
|
|
101
|
-
|
|
102
|
-
Если семантика не очевидна, собери минимальную модель: значения для `X#`, `C#`, `S#`; затем вычисли целевые `D#`, `F#`, `P#`, `A#`.
|
|
103
|
-
|
|
104
|
-
Особенно проверяй проекции, фильтры, `red`, `bool` / `debool`, аксиомы. Для важной проверки сделай скрипт-тест: сессия + значения неопределяемых конституент + проверка `success` и ожидаемого `value`.
|
|
105
|
-
|
|
106
|
-
Цикл: `MODEL-TESTING.md`.
|
|
107
|
-
|
|
108
|
-
## Быстрое ревью
|
|
109
|
-
|
|
110
|
-
- Атрибутивная и родоструктурная экспликации не смешаны без запроса.
|
|
111
|
-
- Нет проверки принадлежности к собственной типизации: `x∈X1` избыточно, если `x` уже объявлен в `X1`.
|
|
112
|
-
- Покрыты главные сущности, роли, отношения, утверждения.
|
|
113
|
-
- Повторяющиеся отборы вынесены в `F#`.
|
|
114
|
-
- Каждая аксиома имеет понятную цель.
|
|
115
|
-
- Сомнительная семантика проверена на маленькой КМ при наличии тестовых данных.
|
|
116
|
-
|
|
117
|
-
## Рабочий порядок
|
|
118
|
-
|
|
119
|
-
1. Собери словарь: базовые понятия, ключевые отношения, сценарий синтеза.
|
|
120
|
-
2. Добавь `X#`, `C#` с конвенциями из источника.
|
|
121
|
-
3. Добавь базовые `S#`: трансформация, перевод, допускание, выбор, цели, субъекты.
|
|
122
|
-
4. Проверь, что базовые понятия независимы и не выводятся друг из друга.
|
|
123
|
-
5. Добавь `A#` на структуры: `card`, покрытие `Pr1,2(S#)=…`, принадлежность выбора.
|
|
124
|
-
6. Введи `F#` для типовых запросов.
|
|
125
|
-
7. Производные понятия строй через `Pr*`, `Fi*`, `F#` от центрального `D#` и базовых `S#`.
|
|
126
|
-
8. Перед каждым upsert запускай `analyzeExpression`.
|
|
127
|
-
9. Для сомнительной семантики собери маленькую КМ (`MODEL-TESTING.md`).
|
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/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` должны вычисляться из формулы, поэтому их напрямую не задавай.
|
package/docs/README.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# Документация rstool
|
|
2
2
|
|
|
3
|
-
Краткая
|
|
3
|
+
Краткая справка для агентов.
|
|
4
|
+
|
|
5
|
+
**Воркфлоу и чеклисты** — в `../skills/rstool-helper/GUIDE.md` (начинай с него). Здесь — справочные правила языка и предметной области.
|
|
4
6
|
|
|
5
7
|
## Какой файл читать
|
|
6
8
|
|
|
@@ -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,8 +1,8 @@
|
|
|
1
|
-
# rstool
|
|
1
|
+
# Примеры rstool
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Короткие примеры для агентов. Полные скрипты — `../../examples/`. Воркфлоу — [GUIDE.md](GUIDE.md).
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Минимальная сессия
|
|
6
6
|
|
|
7
7
|
```ts
|
|
8
8
|
import { CstType, RSToolAgent } from '@rsconcept/rstool';
|
|
@@ -20,7 +20,7 @@ tool.addOrUpdateConstituenta(sessionId, {
|
|
|
20
20
|
alias: 'S1',
|
|
21
21
|
cstType: CstType.STRUCTURED,
|
|
22
22
|
definitionFormal: 'ℬ(X1×X1)',
|
|
23
|
-
convention: '
|
|
23
|
+
convention: 'Элементы — пары (родитель, потомок); родитель, потомок ∈ X1.'
|
|
24
24
|
}
|
|
25
25
|
});
|
|
26
26
|
|
|
@@ -31,9 +31,9 @@ const { state, diagnostics } = tool.addOrUpdateConstituenta(sessionId, {
|
|
|
31
31
|
console.log(state.analysis.success, diagnostics.length);
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
##
|
|
34
|
+
## Анализ перед upsert
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
Черновой анализ, когда синтаксис или `cstType` под вопросом.
|
|
37
37
|
|
|
38
38
|
```ts
|
|
39
39
|
const analysis = tool.analyzeExpression(sessionId, {
|
|
@@ -46,9 +46,9 @@ if (!analysis.success) {
|
|
|
46
46
|
}
|
|
47
47
|
```
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
Исправь диапазон `from` / `to` из отчёта и повтори анализ. При необходимости пересмотри определение целиком или разбей на несколько конституент.
|
|
50
50
|
|
|
51
|
-
##
|
|
51
|
+
## Вычисление
|
|
52
52
|
|
|
53
53
|
```ts
|
|
54
54
|
tool.setConstituentaValue(sessionId, {
|
|
@@ -64,11 +64,11 @@ const scratch = tool.evaluateExpression(sessionId, {
|
|
|
64
64
|
console.log(scratch.success, scratch.value); // true, 3
|
|
65
65
|
```
|
|
66
66
|
|
|
67
|
-
|
|
67
|
+
Для сохранённых определений задай значения `basic`, `constant` и `structure`, затем вызови `evaluateConstituenta` или `recalculateModel`.
|
|
68
68
|
|
|
69
|
-
##
|
|
69
|
+
## Семантический smoke-тест
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
Синтаксис верен, но смысл неочевиден — собери маленькую модель и проверь значение.
|
|
72
72
|
|
|
73
73
|
```ts
|
|
74
74
|
import { CstType, EvalStatus, RSToolAgent } from '@rsconcept/rstool';
|
|
@@ -103,15 +103,15 @@ tool.setConstituentaValues(sessionId, {
|
|
|
103
103
|
const result = tool.evaluateConstituenta(sessionId, { constituentId: 3 });
|
|
104
104
|
|
|
105
105
|
if (!result.success || result.status !== EvalStatus.HAS_DATA || JSON.stringify(result.value) !== '[0]') {
|
|
106
|
-
throw new Error(
|
|
106
|
+
throw new Error(`Ожидалось Pr1(S1) = первая координата; получено ${JSON.stringify(result)}`);
|
|
107
107
|
}
|
|
108
108
|
```
|
|
109
109
|
|
|
110
|
-
|
|
110
|
+
Подробнее: `../../docs/MODEL-TESTING.md`.
|
|
111
111
|
|
|
112
|
-
##
|
|
112
|
+
## Клиент обёртки
|
|
113
113
|
|
|
114
|
-
|
|
114
|
+
Когда агент общается с отдельным процессом `rstool-wrapper`.
|
|
115
115
|
|
|
116
116
|
```ts
|
|
117
117
|
import { CstType } from '@rsconcept/rstool';
|
|
@@ -135,36 +135,27 @@ console.log(diagnostics);
|
|
|
135
135
|
await client.close();
|
|
136
136
|
```
|
|
137
137
|
|
|
138
|
-
|
|
138
|
+
Ручной stdio — один JSON-запрос на строку:
|
|
139
139
|
|
|
140
140
|
```jsonl
|
|
141
141
|
{ "id": "1", "method": "createSession", "params": {} }
|
|
142
142
|
{ "id": "2", "method": "addOrUpdateConstituenta", "params": { "sessionId": "...", "input": { "draft": { "id": 1, "alias": "X1", "cstType": "basic", "definitionFormal": "" } } } }
|
|
143
143
|
```
|
|
144
144
|
|
|
145
|
-
##
|
|
145
|
+
## Экспорт / импорт
|
|
146
146
|
|
|
147
147
|
```ts
|
|
148
148
|
const payload = tool.exportSession(sessionId);
|
|
149
149
|
const restored = tool.importSession(payload);
|
|
150
150
|
```
|
|
151
151
|
|
|
152
|
-
|
|
152
|
+
Экспорт включает состояние сессии и значения модели.
|
|
153
153
|
|
|
154
|
-
|
|
154
|
+
Файлы для загрузки пользователем в существующий объект Portal:
|
|
155
155
|
|
|
156
156
|
```ts
|
|
157
157
|
const schemaJson = tool.exportPortalSchema(sessionId);
|
|
158
158
|
const modelJson = tool.exportPortalModel(sessionId);
|
|
159
159
|
```
|
|
160
160
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
## Common mistakes
|
|
164
|
-
|
|
165
|
-
- Wrong `cstType` in `analyzeExpression` → role-specific errors.
|
|
166
|
-
- `term` with `X1×X1` for a relation → full Cartesian product, not relation typification.
|
|
167
|
-
- `structure` with `Pr1(S1)` → wrong role; projections belong on `term` / `function`.
|
|
168
|
-
- Same long `∃d1…∃dn` chain in many `D#` → define one central `D#` and use `Pr*` / `F#`.
|
|
169
|
-
- `setConstituentaValue` on `term`, `axiom`, or `statement` → cannot set computed constituents directly.
|
|
170
|
-
- Evaluation before base bindings → missing value, empty result, or evaluation failure.
|
|
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. Develop schema - add constituents with proper type and attributes.
|
|
36
|
-
3. Add dependencies before dependents.
|
|
37
|
-
4. Use `analyzeExpression` before upsert when unsure.
|
|
38
|
-
5. Fix diagnostics by `from` / `to` range in `definitionFormal`.
|
|
39
|
-
6. When unsure about semantics, build a tiny conceptual model and evaluate test data.
|
|
34
|
+
### Редактирование и проверка схемы
|
|
40
35
|
|
|
41
|
-
|
|
42
|
-
- Evaluate with `evaluateExpression`, `evaluateConstituenta`, or `recalculateModel`.
|
|
36
|
+
Когда схема уже есть и нужны точечные правки, новые конституенты или проверка формул.
|
|
43
37
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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` (модель).
|
|
47
48
|
|
|
48
|
-
|
|
49
|
+
### Концептуализация (КС из содержания источника)
|
|
49
50
|
|
|
50
|
-
|
|
51
|
-
2. If false, read `analysis.diagnostics` or `listDiagnostics`.
|
|
52
|
-
3. Map `code` to a fix in `DIAGNOSTICS.md`.
|
|
53
|
-
4. Patch the reported `from` / `to` range.
|
|
54
|
-
5. Re-run only after changing input.
|
|
51
|
+
Когда нужно построить или существенно развить КС по тексту ПО, требованиям или предметному описанию. Правила редукции, слоёв и паттернов — [CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md).
|
|
55
52
|
|
|
56
|
-
|
|
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
|
+
### Порядок объявления конституент
|
|
57
91
|
|
|
58
92
|
1. `basic`, `constant`.
|
|
59
|
-
2.
|
|
60
|
-
3.
|
|
61
|
-
4.
|
|
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
|
+
### Ревью концептуальной схемы
|
|
62
113
|
|
|
63
|
-
|
|
114
|
+
Перед завершением концептуализации или крупного изменения. Правила — [CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md).
|
|
64
115
|
|
|
65
|
-
- [ ]
|
|
66
|
-
- [ ] `
|
|
67
|
-
- [ ]
|
|
68
|
-
- [ ]
|
|
116
|
+
- [ ] Атрибутивная и родоструктурная экспликации не смешаны без явного запроса.
|
|
117
|
+
- [ ] Нет избыточной проверки принадлежности к собственной типизации (`x∈X1`, если `x` уже в `X1`).
|
|
118
|
+
- [ ] Базовые понятия независимы, введены необходимые по смысле аксиомы.
|
|
119
|
+
- [ ] Покрыты главные сущности, роли, отношения, утверждения.
|
|
120
|
+
- [ ] В текстовых определениях используются только понятия из схемы.
|
|
121
|
+
- [ ] Повторяющиеся части формальных определений вынесены в производные понятия `D#` и `F#`.
|
|
122
|
+
- [ ] Сомнительная семантика проверена на маленькой КМ при наличии тестовых данных.
|
|
@@ -1,39 +1,39 @@
|
|
|
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; //
|
|
36
|
+
id: number; // стабильный id внутри сессии
|
|
37
37
|
alias: string;
|
|
38
38
|
cstType: CstType;
|
|
39
39
|
definitionFormal: 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,9 +108,9 @@ 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 {
|
|
@@ -121,79 +121,77 @@ interface AnalysisResult {
|
|
|
121
121
|
}
|
|
122
122
|
```
|
|
123
123
|
|
|
124
|
-
##
|
|
124
|
+
## RSLang
|
|
125
125
|
|
|
126
|
-
|
|
126
|
+
Кратко: язык на базе логики первого порядка; разделение множественных и логических выражений; параметризованные шаблоны для функций и предикатов.
|
|
127
127
|
|
|
128
|
-
-
|
|
128
|
+
- **Типизация**: структурный тип выражения; ступени включают элементы (`Xi`, `Ci`), `Z`, кортежи `(H1×…×Hn)`, множества `ℬ(H)`, логику `Logic`, параметризованные `Hr 🠔 [H1,…,Hi]`. У `structure` (`S#`) поле `definitionFormal` **задаёт** типизацию. У `term` (`D#`) типизация **выводится** из определения.
|
|
129
129
|
|
|
130
|
-
##
|
|
130
|
+
## Токены грамматики
|
|
131
131
|
|
|
132
|
-
|
|
132
|
+
Из `rslang.grammar`:
|
|
133
133
|
|
|
134
|
-
|
|
|
135
|
-
|
|
|
136
|
-
|
|
|
137
|
-
|
|
|
138
|
-
|
|
|
139
|
-
|
|
|
140
|
-
|
|
|
141
|
-
|
|
|
142
|
-
|
|
|
143
|
-
|
|
|
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`, `∅` |
|
|
144
144
|
|
|
145
|
-
|
|
145
|
+
Полная грамматика и приоритеты: `docs/GRAMMAR-REF.md`.
|
|
146
146
|
|
|
147
|
-
##
|
|
147
|
+
## Документация
|
|
148
148
|
|
|
149
|
-
|
|
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` |
|
|
150
165
|
|
|
151
|
-
|
|
152
|
-
| ------------------------------------ | ------------------------------------------ |
|
|
153
|
-
| Identifiers, literals | `docs/SYNTAX.md` § _Identifier rules_ |
|
|
154
|
-
| Grades, `Logic`, parameterized types | `docs/TYPIFICATION.md` |
|
|
155
|
-
| Logical expressions | `docs/SYNTAX.md` § _Logical expressions_ |
|
|
156
|
-
| Set operators | `docs/SYNTAX.md` § _Set-theoretic_ |
|
|
157
|
-
| Integer arithmetic | `docs/SYNTAX.md` § _Arithmetic_ |
|
|
158
|
-
| Structural / typification reshaping | `docs/TYPIFICATION.md` § _Forming/derived_ |
|
|
159
|
-
| Quantifiers | `docs/SYNTAX.md` § _Quantifiers_ |
|
|
160
|
-
| Parameterized functions, templates | `docs/SYNTAX.md` § _Parameterised_ |
|
|
161
|
-
| Correctness / validation mindset | `docs/SYNTAX.md` § _Correctness model_ |
|
|
162
|
-
| Definition semantic tests | `docs/MODEL-TESTING.md` |
|
|
163
|
-
| Domain vocabulary | `docs/DOMAIN.md` |
|
|
164
|
-
| Constituent fields and ordering | `docs/CONSTITUENTA.md` |
|
|
165
|
-
| Portal REST API | `docs/PORTAL-API.md` |
|
|
166
|
-
| Grammar tokens / precedence | `docs/GRAMMAR-REF.md` |
|
|
166
|
+
Воркфлоу и чеклисты — `skills/rstool-helper/GUIDE.md`.
|
|
167
167
|
|
|
168
|
-
##
|
|
168
|
+
## Коды ошибок
|
|
169
169
|
|
|
170
|
-
|
|
170
|
+
Категории и исправления по коду: `docs/DIAGNOSTICS.md`.
|
|
171
171
|
|
|
172
|
-
|
|
172
|
+
Категории:
|
|
173
173
|
|
|
174
|
-
|
|
174
|
+
- `0x84xx` — синтаксис / разбор
|
|
175
|
+
- `0x28xx` — предупреждения локальных объявлений
|
|
176
|
+
- `0x88xx` — семантика / типы
|
|
177
|
+
- `0x886x` — уровень конституент (пустая производная, запрещённое определение)
|
|
178
|
+
- `0x81xx` — вычисление (runtime; из `evaluateExpression` / `evaluateConstituenta`)
|
|
175
179
|
|
|
176
|
-
|
|
177
|
-
- `0x28xx` — local declaration warnings
|
|
178
|
-
- `0x88xx` — semantic / type
|
|
179
|
-
- `0x886x` — constituent-level (empty derived, definition not allowed)
|
|
180
|
-
- `0x81xx` — evaluation (runtime; returned by `evaluateExpression` / `evaluateConstituenta`)
|
|
180
|
+
## Форма экспорта сессии
|
|
181
181
|
|
|
182
|
-
|
|
182
|
+
`exportSession(sessionId)` возвращает JSON-строку `{ contractVersion, state, diagnostics }`.
|
|
183
183
|
|
|
184
|
-
`
|
|
184
|
+
- `state.alias`, `state.title`, `state.comment` — метаданные объекта библиотеки для экспорта в Portal (`comment` → JSON `description`).
|
|
185
|
+
- `state.items[]` — каждая конституента с `id`, `alias`, `cstType`, `definitionFormal`, опциональными текстовыми полями и вложенным результатом анализа.
|
|
186
|
+
- `state.model.items[]` — присутствует, если заданы значения интерпретации.
|
|
187
|
+
- `diagnostics[]` — накопленные диагностики со смещениями и кодами.
|
|
185
188
|
|
|
186
|
-
|
|
187
|
-
- `state.items[]` contains each constituent with `id`, `alias`, `cstType`, `definitionFormal`, optional text fields, and nested analysis output.
|
|
188
|
-
- `state.model.items[]` is present when interpretation values have been set.
|
|
189
|
-
- `diagnostics[]` contains accumulated diagnostics with offsets and codes.
|
|
189
|
+
## JSON импорта Portal
|
|
190
190
|
|
|
191
|
-
|
|
191
|
+
Для **Load from JSON** на существующей схеме или модели Portal:
|
|
192
192
|
|
|
193
|
-
|
|
193
|
+
- `exportPortalSchema(sessionId)` — файл схемы
|
|
194
|
+
- `exportPortalModel(sessionId)` — файл модели
|
|
194
195
|
|
|
195
|
-
- `
|
|
196
|
-
- `
|
|
197
|
-
|
|
198
|
-
- Schema `items[]`: versioned constituent fields (`cst_type`, `definition_formal`, `term_raw`, …).
|
|
199
|
-
- Model `items[]`: `{ id, type, value }` per binding.
|
|
196
|
+
- Схема `items[]`: поля конституент (`cst_type`, `definition_formal`, `term_raw`, …).
|
|
197
|
+
- Модель `items[]`: `{ id, type, value }` на каждую привязку.
|
|
@@ -18,9 +18,9 @@ Then continue with the canonical files below.
|
|
|
18
18
|
|
|
19
19
|
## Canonical files (read before rstool work)
|
|
20
20
|
|
|
21
|
-
- **Start here** —
|
|
22
|
-
- API, stdio,
|
|
23
|
-
-
|
|
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`
|
|
24
24
|
- Language / domain docs: `node_modules/@rsconcept/rstool/docs/*.md`
|
|
25
25
|
- Install procedure: `node_modules/@rsconcept/rstool/skills/INSTALL.md`
|
|
26
26
|
|