@rsconcept/rstool 1.4.1 → 1.4.3
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/BASE-SELECTION.md +2 -2
- package/docs/DIAGNOSTICS.md +24 -24
- package/docs/DOMAIN.md +5 -5
- package/docs/PORTAL-API.md +2 -2
- package/docs/README.md +1 -1
- package/docs/SYNTAX.md +1 -1
- package/examples/README.md +2 -0
- package/package.json +1 -1
- package/skills/rstool-helper/EXAMPLES.md +1 -1
- package/skills/rstool-helper/GUIDE.md +25 -4
- package/skills/rstool-helper/REFERENCE.md +1 -1
- package/skills/rstool-helper/SKILL.md +5 -1
package/docs/BASE-SELECTION.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
| :---------------------------------------------------------------------- | :---- | :--------------------------------------------------------------------------- |
|
|
9
9
|
| Предметные объекты без числового смысла: люди, документы, ситуации | `X#` | Элементы задаются интерпретацией и различаются только как элементы множества |
|
|
10
10
|
| Конечный именованный набор, где в формулах нужны порядок или арифметика | `C#` | Элементы интерпретируются в КМ, но поддерживают сравнение и арифметику языка |
|
|
11
|
-
| Чистые целые: размеры, счётчики, индексы, `card`, рекурсия над числами | `Z` | Это встроенная ступень
|
|
11
|
+
| Чистые целые: размеры, счётчики, индексы, `card`, рекурсия над числами | `Z` | Это встроенная ступень ЯРЭ; отдельная конституента не нужна |
|
|
12
12
|
|
|
13
13
|
```text
|
|
14
14
|
Нужно неопределяемое понятие?
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
2. Если формула «узнаёт» конкретные элементы базисного множества по способу, не заданному в схеме (скрытый порядок, кодирование атрибута константами) — вероятное нарушение переносимости или лишняя конституента.
|
|
39
39
|
3. Перед сохранением сомнительной формулы — `analyzeExpression`.
|
|
40
40
|
|
|
41
|
-
**Иллюстрация (родство):** при `X1 = {alice, bob, carol}` биективная замена на `{p1, p2, p3}` не меняет, кто чей родитель в `S1: ℬ(X1×X1)`, если пары переименованы согласованно. Формула `∀a,b∈X1 a < b` некорректна — порядок на людях в
|
|
41
|
+
**Иллюстрация (родство):** при `X1 = {alice, bob, carol}` биективная замена на `{p1, p2, p3}` не меняет, кто чей родитель в `S1: ℬ(X1×X1)`, если пары переименованы согласованно. Формула `∀a,b∈X1 a < b` некорректна — порядок на людях в ЯРЭ не задан.
|
|
42
42
|
|
|
43
43
|
## Детали по вариантам
|
|
44
44
|
|
package/docs/DIAGNOSTICS.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Диагностика
|
|
2
2
|
|
|
3
3
|
Читай, когда `analyzeExpression`, `applySchemaPatch`, `listDiagnostics` или `evaluate`
|
|
4
|
-
вернули диагностику. Коды ошибок
|
|
4
|
+
вернули диагностику. Коды ошибок ЯРЭ — `RSErrorCode` в `@rsconcept/domain`; коды схемы
|
|
5
5
|
и модели — `RSDiagnosticCode` в том же пакете (числовой формат совпадает).
|
|
6
6
|
|
|
7
7
|
## Формы диагностики
|
|
@@ -80,29 +80,29 @@
|
|
|
80
80
|
|
|
81
81
|
## Parser
|
|
82
82
|
|
|
83
|
-
| Код | Имя | `params` | Исправление
|
|
84
|
-
| -------- | -------------------------- | ------------------------- |
|
|
85
|
-
| `0x8400` | `unknownSyntax` | — | Неопределённая синтаксическая ошибка: проверь операторы, скобки, идентификаторы.
|
|
86
|
-
| `0x8401` | `forbiddenCharacter` | `[character]` | Символ не входит в
|
|
87
|
-
| `0x8409` | `bracketMismatch` | `[expected, actual]` | Закрой ожидаемой скобкой `expected` вместо `actual`.
|
|
88
|
-
| `0x840A` | `doubleParenthesis` | — | Убери лишнюю внешнюю пару `(( … ))`.
|
|
89
|
-
| `0x840B` | `missingOpenBracket` | `[bracket]` | Непарная закрывающая `bracket`: убери её или добавь открывающую.
|
|
90
|
-
| `0x840C` | `missingCloseBracket` | `[bracket]` | Непарная открывающая `bracket`: убери её или добавь закрывающую.
|
|
91
|
-
| `0x8415` | `expectedLocal` | — | Ожидалось имя локальной переменной.
|
|
92
|
-
| `0x8416` | `expectedType` | `[expectedClass, actual]` | Несоответствие класса выражения ожидаемому.
|
|
93
|
-
| `0x8417` | `invalidFilterSyntax` | — | Синтаксис `Fi`: `Fi1[D1](S1)`, `Fi1,2[D1,D2](S1)` или `Fi1,2[D3](S1)`.
|
|
94
|
-
| `0x8418` | `expectedFunctionBody` | — | Нужно тело функции после `[параметры]`.
|
|
95
|
-
| `0x8419` | `expectedExpressionBody` | — | Нужно теоретико-множественное тело функции (ТФ).
|
|
96
|
-
| `0x841A` | `expectedLogicBody` | — | Нужно логическое тело функции.
|
|
97
|
-
| `0x841B` | `expectedQuantifierBody` | — | Нужно логическое тело после `∀(∃)…∈домен`.
|
|
98
|
-
| `0x841C` | `expectedDeclarativeBody` | — | Допиши декларативное `D{…∈… \| …}`.
|
|
99
|
-
| `0x841D` | `expectedImperativeBody` | — | Допиши императивное `I{… \| …}`.
|
|
100
|
-
| `0x841E` | `expectedRecursiveBody` | — | Допиши рекурсивное `R{…:=… \| … \| …}`.
|
|
101
|
-
| `0x841F` | `expectedQuantifierDomain` | — | После переменной квантора нужны `∈` и домен.
|
|
102
|
-
| `0x8420` | `expectedRightOperand` | — | Нужен правый операнд после оператора.
|
|
103
|
-
| `0x8421` | `expectedUnaryOperand` | — | Нужно выражение после `¬`.
|
|
104
|
-
| `0x8422` | `globalFuncParenCall` | `[name]` | Вызов `F`/`P` только через `[…]`, не `(…)`.
|
|
105
|
-
| `0x8423` | `expectedArgument` | — | Нужен аргумент в списке `[…]` у F/P.
|
|
83
|
+
| Код | Имя | `params` | Исправление |
|
|
84
|
+
| -------- | -------------------------- | ------------------------- | -------------------------------------------------------------------------------- |
|
|
85
|
+
| `0x8400` | `unknownSyntax` | — | Неопределённая синтаксическая ошибка: проверь операторы, скобки, идентификаторы. |
|
|
86
|
+
| `0x8401` | `forbiddenCharacter` | `[character]` | Символ не входит в ЯРЭ (напр. `^` для степени). Удали или замени его. |
|
|
87
|
+
| `0x8409` | `bracketMismatch` | `[expected, actual]` | Закрой ожидаемой скобкой `expected` вместо `actual`. |
|
|
88
|
+
| `0x840A` | `doubleParenthesis` | — | Убери лишнюю внешнюю пару `(( … ))`. |
|
|
89
|
+
| `0x840B` | `missingOpenBracket` | `[bracket]` | Непарная закрывающая `bracket`: убери её или добавь открывающую. |
|
|
90
|
+
| `0x840C` | `missingCloseBracket` | `[bracket]` | Непарная открывающая `bracket`: убери её или добавь закрывающую. |
|
|
91
|
+
| `0x8415` | `expectedLocal` | — | Ожидалось имя локальной переменной. |
|
|
92
|
+
| `0x8416` | `expectedType` | `[expectedClass, actual]` | Несоответствие класса выражения ожидаемому. |
|
|
93
|
+
| `0x8417` | `invalidFilterSyntax` | — | Синтаксис `Fi`: `Fi1[D1](S1)`, `Fi1,2[D1,D2](S1)` или `Fi1,2[D3](S1)`. |
|
|
94
|
+
| `0x8418` | `expectedFunctionBody` | — | Нужно тело функции после `[параметры]`. |
|
|
95
|
+
| `0x8419` | `expectedExpressionBody` | — | Нужно теоретико-множественное тело функции (ТФ). |
|
|
96
|
+
| `0x841A` | `expectedLogicBody` | — | Нужно логическое тело функции. |
|
|
97
|
+
| `0x841B` | `expectedQuantifierBody` | — | Нужно логическое тело после `∀(∃)…∈домен`. |
|
|
98
|
+
| `0x841C` | `expectedDeclarativeBody` | — | Допиши декларативное `D{…∈… \| …}`. |
|
|
99
|
+
| `0x841D` | `expectedImperativeBody` | — | Допиши императивное `I{… \| …}`. |
|
|
100
|
+
| `0x841E` | `expectedRecursiveBody` | — | Допиши рекурсивное `R{…:=… \| … \| …}`. |
|
|
101
|
+
| `0x841F` | `expectedQuantifierDomain` | — | После переменной квантора нужны `∈` и домен. |
|
|
102
|
+
| `0x8420` | `expectedRightOperand` | — | Нужен правый операнд после оператора. |
|
|
103
|
+
| `0x8421` | `expectedUnaryOperand` | — | Нужно выражение после `¬`. |
|
|
104
|
+
| `0x8422` | `globalFuncParenCall` | `[name]` | Вызов `F`/`P` только через `[…]`, не `(…)`. |
|
|
105
|
+
| `0x8423` | `expectedArgument` | — | Нужен аргумент в списке `[…]` у F/P. |
|
|
106
106
|
|
|
107
107
|
## Предупреждения
|
|
108
108
|
|
package/docs/DOMAIN.md
CHANGED
|
@@ -8,19 +8,19 @@
|
|
|
8
8
|
- **Концептуальная схема (`КС`)** — система понятий, утверждений и связей между ними.
|
|
9
9
|
- **Концептуальная модель (`КМ`)** — КС плюс интерпретация ее понятий на конечных данных.
|
|
10
10
|
- **Операционная схема синтеза (`ОСС`)** — граф загрузок и синтезов КС.
|
|
11
|
-
-
|
|
11
|
+
- **ЯРЭ** (язык родоструктурной экспликации) — формальный язык для понятий, отношений, операций и утверждений.
|
|
12
12
|
- **Типизация / ступень** — структура значений выражения: элемент, целое, кортеж, множество, `Logic`.
|
|
13
13
|
- **Граф термов** — зависимости: конституента ссылается на другую в формальном определении.
|
|
14
14
|
|
|
15
15
|
## Классификация понятий КС
|
|
16
16
|
|
|
17
17
|
- **Неопределяемое понятие** — конституента, вводимая конвенцией (и при необходимости аксиомами), а не формальным определением. В родоструктурной экспликации: `X#`, `C#`, `S#`. Смысл задают `convention`, интерпретация и аксиомы.
|
|
18
|
-
- **Производное понятие** — конституента с формальным определением на
|
|
18
|
+
- **Производное понятие** — конституента с формальным определением на ЯРЭ: `D#`, `F#`, `P#` и связанные выводимые конструкции. Значение получают из определения при заданной интерпретации неопределяемых понятий.
|
|
19
19
|
- **Ядро КС** — неопределяемые понятия, аксиомы и производные понятия, необходимые для их формулировки.
|
|
20
20
|
- **Тело КС** — остальные конституенты схемы, не входящие в ядро.
|
|
21
|
-
- **Конвенция** — текстовое соглашение о том, как неопределяемое понятие соотносится с сущностями предметной области. В данных схемы хранится в поле `convention` конституенты. Конвенция не заменяет формальное определение и не проходит формальную проверку
|
|
21
|
+
- **Конвенция** — текстовое соглашение о том, как неопределяемое понятие соотносится с сущностями предметной области. В данных схемы хранится в поле `convention` конституенты. Конвенция не заменяет формальное определение и не проходит формальную проверку ЯРЭ. Она фиксирует предметный смысл, который нельзя вывести из формулы: что именно считается элементом множества, как читать компоненты кортежа, какой порядок в паре отношения, какие константы или операции подразумеваются. В конвенции используется предметный язык и термины, которые могут быть не выражены в концептуальной схеме.
|
|
22
22
|
- **Интерпретация** — соотнесение понятий КС с сущностями предметной области. В концептуальной модели задаётся значениями неопределяемых конституент и вычислением производных.
|
|
23
|
-
- **Биективная переносимость** — независимость значения формального определения от биективной замены интерпретаций неопределяемых понятий. Для `X#` опирается на несравнимость элементов; анализатор
|
|
23
|
+
- **Биективная переносимость** — независимость значения формального определения от биективной замены интерпретаций неопределяемых понятий. Для `X#` опирается на несравнимость элементов; анализатор ЯРЭ отсекает формулы, нарушающие переносимость.
|
|
24
24
|
|
|
25
25
|
## Конституенты
|
|
26
26
|
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
| `A#` | **Аксиома**: логическое требование к модели |
|
|
39
39
|
| `T#` | **Высказывание**: логическое утверждение о модели |
|
|
40
40
|
|
|
41
|
-
`Z` — встроенная ступень целых в
|
|
41
|
+
`Z` — встроенная ступень целых в ЯРЭ, **не конституента**. Для выбора между `X#`, `C#` и `Z` — [BASE-SELECTION.md](BASE-SELECTION.md).
|
|
42
42
|
|
|
43
43
|
`R#` — **радикал**, шаблонная ступень в доменах параметров `F#` / `P#`. Это тоже **не конституента**: в схеме нет записи с `alias` `R1`, `R2`, … и добавлять её не нужно ([SYNTAX.md](SYNTAX.md), раздел «Радикалы»).
|
|
44
44
|
|
package/docs/PORTAL-API.md
CHANGED
|
@@ -202,7 +202,7 @@ curl.exe -s "https://api.portal.acconcept.ru/api/rsforms/856/details"
|
|
|
202
202
|
| `crucial` | обычно не переносить | UI/Portal-флаг |
|
|
203
203
|
| `value_is_property` | обычно не переносить | Переопределение класса интерпретируемости |
|
|
204
204
|
|
|
205
|
-
`inheritance`, `attribution`, `oss`, `models`, `versions`, `editors` полезны для контекста Portal, но не нужны для базовой проверки
|
|
205
|
+
`inheritance`, `attribution`, `oss`, `models`, `versions`, `editors` полезны для контекста Portal, но не нужны для базовой проверки ЯРЭ в `rstool`.
|
|
206
206
|
|
|
207
207
|
## Как перенести КС в rstool
|
|
208
208
|
|
|
@@ -265,7 +265,7 @@ tool.applySchemaPatch(
|
|
|
265
265
|
**до** следующего шага пайплайна (например вызова `npx tsx`), скрипт оборвётся и артефакт
|
|
266
266
|
не обновится.
|
|
267
267
|
|
|
268
|
-
- **Запись JSON** — всегда UTF-8; для
|
|
268
|
+
- **Запись JSON** — всегда UTF-8; для символов ЯРЭ в формулах не экранируй Unicode в JSON:
|
|
269
269
|
|
|
270
270
|
```python
|
|
271
271
|
path.write_text(json.dumps(payload, ensure_ascii=False, indent=2), encoding='utf-8')
|
package/docs/README.md
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
- **CONCEPTUAL-SCHEMA.md** — проектирование и ревью концептуальных схем.
|
|
11
11
|
- **CONSTITUENTA.md** — структура и правила конституент.
|
|
12
12
|
- **BASE-SELECTION.md** — выбор основания: `X#`, `C#` или `Z`.
|
|
13
|
-
- **SYNTAX.md** — синтаксис
|
|
13
|
+
- **SYNTAX.md** — синтаксис ЯРЭ: операторы, генераторы `D{}`/`I{}`/`R{}`, кванторы, `F#`/`P#`.
|
|
14
14
|
- **TYPIFICATION.md** — типизация (`AnalysisResult.type`, `valueClass`).
|
|
15
15
|
- **MODEL-TESTING.md** — проверка семантики определений на маленьких концептуальных моделях.
|
|
16
16
|
- **DIAGNOSTICS.md** — диагностики анализа и способы исправления ошибок.
|
package/docs/SYNTAX.md
CHANGED
package/examples/README.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Полные исполняемые сценарии поверх `RSToolWrapperClient` (stdio-обёртка) и готовые JSON-сессии для импорта. Короткие фрагменты кода для агентов — в [`../skills/rstool-helper/EXAMPLES.md`](../skills/rstool-helper/EXAMPLES.md); воркфлоу — [`../skills/rstool-helper/GUIDE.md`](../skills/rstool-helper/GUIDE.md).
|
|
4
4
|
|
|
5
|
+
**Агентам:** не добавляйте сюда разовые `build-*.ts` и папки по текущей задаче пользователя. Артефакты и скрипты — вне `rsconcept/rstool/` (см. «Границы правок» в GUIDE). В `examples/` — только сопровождаемые демо пакета.
|
|
6
|
+
|
|
5
7
|
## Как запускать
|
|
6
8
|
|
|
7
9
|
После `npm install @rsconcept/rstool` (нужен `tsx` или аналог):
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rsconcept/rstool",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.3",
|
|
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",
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
#
|
|
1
|
+
# ЯРЭ и rstool
|
|
2
2
|
|
|
3
3
|
Краткий входной гайд для агентов. Детали — в связанных документах.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
**ЯРЭ** (язык родоструктурной экспликации) — формальная нотация концептуальных схем: понятия, отношения, операции, утверждения. Основа: принадлежность `x∈y`, теоретико-множественные и логические выражения, типизация.
|
|
6
6
|
|
|
7
7
|
**rstool** — API агента для сессий, редактирования схемы, анализа, диагностик, значений модели, вычисления, экспорта/импорта.
|
|
8
8
|
|
|
@@ -20,6 +20,27 @@
|
|
|
20
20
|
- Модель: `setModelValues`, `evaluate`, `recalculateModel`.
|
|
21
21
|
- Перед сохранением сомнительной формулы — `analyzeExpression`.
|
|
22
22
|
|
|
23
|
+
## Границы правок: не трогай пакет rstool без запроса
|
|
24
|
+
|
|
25
|
+
Задача по КС, Portal или источнику пользователя **не означает** правку дерева `rsconcept/rstool/`.
|
|
26
|
+
Пакет — библиотека и справочник; каталог `examples/` — **штатные** демо пакета, а не место для разовых скриптов агента.
|
|
27
|
+
|
|
28
|
+
Правки в rstool уместны только если пользователь **явно** просит, например:
|
|
29
|
+
|
|
30
|
+
- доработать API, stdio, контракт, тесты rstool;
|
|
31
|
+
- добавить **общий** пример в пакет;
|
|
32
|
+
- обновить skill/docs rstool (в т.ч. это руководство).
|
|
33
|
+
|
|
34
|
+
### Как запускать rstool, не кладя скрипт в пакет
|
|
35
|
+
|
|
36
|
+
Из корня workspace Portal (после `pnpm install` и сборки `@rsconcept/domain`):
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
pnpm --filter @rsconcept/rstool exec tsx path/to/your/build-schema.ts
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
В скрипте импортируй API пакета (`@rsconcept/rstool` или относительный путь к `rsconcept/rstool/src` только если скрипт лежит вне пакета и это осознанный выбор). Либо используй stdio/MCP без отдельного файла.
|
|
43
|
+
|
|
23
44
|
## Что читать
|
|
24
45
|
|
|
25
46
|
Пути — относительно этого файла.
|
|
@@ -30,7 +51,7 @@
|
|
|
30
51
|
- **`X#` / `C#` / `Z`:** [../../docs/BASE-SELECTION.md](../../docs/BASE-SELECTION.md) — когда какое основание вводить.
|
|
31
52
|
- Концептуализация, создание схемы: [../../docs/CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md).
|
|
32
53
|
- Конституенты и валидация: [../../docs/CONSTITUENTA.md](../../docs/CONSTITUENTA.md).
|
|
33
|
-
- Синтаксис
|
|
54
|
+
- Синтаксис ЯРЭ: [../../docs/SYNTAX.md](../../docs/SYNTAX.md).
|
|
34
55
|
- Типизация: [../../docs/TYPIFICATION.md](../../docs/TYPIFICATION.md).
|
|
35
56
|
- Проверка определений на КМ: [../../docs/MODEL-TESTING.md](../../docs/MODEL-TESTING.md).
|
|
36
57
|
- Диагностики: [../../docs/DIAGNOSTICS.md](../../docs/DIAGNOSTICS.md).
|
|
@@ -145,7 +166,7 @@ kind `auto` (default) определит `portal-details` или `portal-schema`
|
|
|
145
166
|
| `importData` | импорт данных |
|
|
146
167
|
| session, `sessionId` | сессия |
|
|
147
168
|
|
|
148
|
-
Имена конституент (`X1`, `S2`, `D3`) и формулы
|
|
169
|
+
Имена конституент (`X1`, `S2`, `D3`) и формулы ЯРЭ — часть схемы, их приводи как есть; лучше вместе с термином: «терм `D3` (родитель)». Названия методов упоминай, только если пользователь спрашивает про rstool как инструмент.
|
|
149
170
|
|
|
150
171
|
Словарь выше — про поля rstool. Для **понятий схемы** каноничный источник — [DOMAIN.md](../../docs/DOMAIN.md).
|
|
151
172
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rstool-helper
|
|
3
3
|
description: >-
|
|
4
|
-
|
|
4
|
+
ЯРЭ (язык родоструктурной экспликации), формальные определения и проектирование концептуальных схем для агентов. Читай GUIDE и docs из node_modules.
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# rstool-helper
|
|
@@ -26,6 +26,10 @@ description: >-
|
|
|
26
26
|
|
|
27
27
|
Перед началом задачи rstool всегда открывай **GUIDE.md**, затем по необходимости **REFERENCE.md** / **EXAMPLES.md** / нужные `docs/*.md`.
|
|
28
28
|
|
|
29
|
+
## Не правь пакет rstool без запроса
|
|
30
|
+
|
|
31
|
+
Разовые скрипты и JSON для Portal — вне дерева пакета (каталог задачи, `.tmp/`, путь пользователя). См. **«Границы правок»** в GUIDE.md.
|
|
32
|
+
|
|
29
33
|
## Язык ответа пользователю
|
|
30
34
|
|
|
31
35
|
В тексте для пользователя используй термины предметной области («формальное определение», «конституента», «диагностики»), а не английские имена полей и методов API (`definitionFormal`, `applySchemaPatch`). Идентификаторы API — только в коде, patch-ах и JSON. Словарь API → текст: раздел «Язык ответа» в GUIDE.md. Термины КС (базовые понятия, базисное множество, ядро) — только из `docs/DOMAIN.md`, раздел **«Термины: не путать»**.
|