@rsconcept/rstool 1.4.3 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -4
- package/dist/{agent-workflow-D22FeODL.d.ts → agent-workflow-BTwrxOoX.d.ts} +9 -2
- package/dist/{diagnostic-assembly-DRunIcKQ.js → diagnostic-assembly-B-6vIA5I.js} +3 -1
- package/dist/{diagnostic-assembly-DRunIcKQ.js.map → diagnostic-assembly-B-6vIA5I.js.map} +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +1 -1
- package/dist/mappers/model-adapter.js +127 -1
- package/dist/mappers/model-adapter.js.map +1 -0
- package/dist/mappers/schema-adapter.d.ts +5 -1
- package/dist/mappers/schema-adapter.js +44 -11
- package/dist/mappers/schema-adapter.js.map +1 -1
- package/dist/mappers/types.js +1 -1
- package/dist/models/agent-workflow.d.ts +2 -2
- package/dist/models/diagnostic.js +1 -1
- package/dist/models/index.d.ts +4 -4
- package/dist/models/index.js +1 -1
- package/dist/models/rstool-agent.d.ts +1 -1
- package/dist/models/rstool-agent.js +1 -1
- package/dist/models/tool-contract.d.ts +1 -1
- package/dist/models/tool-contract.js +1 -1
- package/dist/models/tool-contract.js.map +1 -1
- package/dist/{models-B255GaEC.js → models-LMyDB0md.js} +25 -4
- package/dist/models-LMyDB0md.js.map +1 -0
- package/dist/rsform-builder-DKwZfJvN.js +102 -0
- package/dist/rsform-builder-DKwZfJvN.js.map +1 -0
- package/dist/{rstool-agent-BGQAzFly.d.ts → rstool-agent-BrAFJcoE.d.ts} +6 -4
- package/dist/session/session-store.js +1 -1
- package/dist/{tool-contract-sQfr-DYD.d.ts → tool-contract-BUaDRHoO.d.ts} +8 -3
- package/dist/wrapper/stdio-wrapper.js +8 -2
- package/dist/wrapper/stdio-wrapper.js.map +1 -1
- package/docs/CONCEPTUAL-SCHEMA.md +44 -0
- package/docs/CONSTITUENTA.md +1 -1
- package/docs/DIAGNOSTICS.md +32 -31
- package/docs/README.md +3 -3
- package/package.json +19 -18
- package/skills/README.md +3 -3
- package/skills/rstool-helper/EXAMPLES.md +194 -3
- package/skills/rstool-helper/GUIDE.md +79 -8
- package/skills/rstool-helper/REFERENCE.md +192 -34
- package/skills/rstool-helper/SKILL.md +28 -8
- package/src/mappers/diagnostic-assembly.ts +3 -0
- package/src/mappers/rsform-builder.ts +1 -1
- package/src/mappers/schema-adapter.ts +48 -16
- package/src/models/agent-workflow.ts +8 -0
- package/src/models/index.ts +1 -0
- package/src/models/rstool-agent.test.ts +21 -0
- package/src/models/rstool-agent.ts +23 -0
- package/src/models/tool-contract.ts +8 -1
- package/src/wrapper/stdio-handler.ts +8 -1
- package/dist/model-adapter-D-YmIvQW.js +0 -225
- package/dist/model-adapter-D-YmIvQW.js.map +0 -1
- package/dist/models-B255GaEC.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rsconcept/rstool",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.0",
|
|
4
4
|
"description": "Agent-facing library for incremental RSForm construction, RSLang analysis, diagnostics, modeling, and evaluation. Wraps @rsconcept/domain with a deterministic session contract.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "IRBorisov",
|
|
@@ -50,21 +50,6 @@
|
|
|
50
50
|
"README.md",
|
|
51
51
|
"LICENSE"
|
|
52
52
|
],
|
|
53
|
-
"dependencies": {
|
|
54
|
-
"@rsconcept/domain": "2.0.2"
|
|
55
|
-
},
|
|
56
|
-
"devDependencies": {
|
|
57
|
-
"@types/node": "^26.1.0",
|
|
58
|
-
"@vitest/coverage-v8": "^4.1.9",
|
|
59
|
-
"tsdown": "^0.22.3",
|
|
60
|
-
"tsx": "^4.22.5",
|
|
61
|
-
"typescript": "^6.0.3",
|
|
62
|
-
"unrun": "^0.3.1",
|
|
63
|
-
"vitest": "^4.1.9"
|
|
64
|
-
},
|
|
65
|
-
"publishConfig": {
|
|
66
|
-
"access": "public"
|
|
67
|
-
},
|
|
68
53
|
"scripts": {
|
|
69
54
|
"build": "tsdown",
|
|
70
55
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
@@ -83,6 +68,22 @@
|
|
|
83
68
|
"example:build-expression-bank-schema": "tsx examples/expression-bank/build-rsform.ts",
|
|
84
69
|
"example:build-template-apply-schema": "tsx examples/template-apply/build-rsform.ts",
|
|
85
70
|
"example:audit-diagnostics": "tsx examples/audit-diagnostics.ts",
|
|
86
|
-
"kinship:cli": "tsx examples/kinship/cli.ts"
|
|
71
|
+
"kinship:cli": "tsx examples/kinship/cli.ts",
|
|
72
|
+
"prepublishOnly": "pnpm run build"
|
|
73
|
+
},
|
|
74
|
+
"dependencies": {
|
|
75
|
+
"@rsconcept/domain": "workspace:*"
|
|
76
|
+
},
|
|
77
|
+
"devDependencies": {
|
|
78
|
+
"@types/node": "^26.1.0",
|
|
79
|
+
"@vitest/coverage-v8": "^4.1.9",
|
|
80
|
+
"tsdown": "^0.22.3",
|
|
81
|
+
"tsx": "^4.22.5",
|
|
82
|
+
"typescript": "^6.0.3",
|
|
83
|
+
"unrun": "^0.3.1",
|
|
84
|
+
"vitest": "^4.1.9"
|
|
85
|
+
},
|
|
86
|
+
"publishConfig": {
|
|
87
|
+
"access": "public"
|
|
87
88
|
}
|
|
88
|
-
}
|
|
89
|
+
}
|
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`: entry point — task→read matrix, workflows (incl. review), checklists (Russian)
|
|
10
|
+
- `rstool-helper/REFERENCE.md`: API, stdio, MCP names, response shapes, help map (Russian)
|
|
11
|
+
- `rstool-helper/EXAMPLES.md`: snippets, anti-patterns, diagnostics, `examples/` index (Russian)
|
|
12
12
|
- `../docs/*.md`: language reference (DOMAIN, SYNTAX, DIAGNOSTICS, …)
|
|
13
13
|
|
|
14
14
|
## npm workflow
|
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# ЯРЭ и rstool — примеры
|
|
2
2
|
|
|
3
|
+
Короткие фрагменты для агентов. Воркфлоу — [GUIDE.md](GUIDE.md). Контракт — [REFERENCE.md](REFERENCE.md).
|
|
4
|
+
|
|
5
|
+
## Индекс runnable `examples/`
|
|
6
|
+
|
|
7
|
+
Полные сценарии пакета:
|
|
8
|
+
|
|
9
|
+
| Тема | Паттерн | Смотри |
|
|
10
|
+
| ----------------------------------------------------- | ------------------------------------ | ------------------------------------------------- |
|
|
11
|
+
| [`sample/`](../../examples/sample/) | Минимальная КС + КМ | `X1`, `C1`, `S1`, `D1`, `A1` |
|
|
12
|
+
| [`kinship/`](../../examples/kinship/) | Предметная схема, модель, CLI | отношения на `X1`, правки интерпретации |
|
|
13
|
+
| [`chocolate-nim/`](../../examples/chocolate-nim/) | Математика на `Z` без `X#` | [BASE-SELECTION.md](../../docs/BASE-SELECTION.md) |
|
|
14
|
+
| [`movd/`](../../examples/movd/) | Сложные `S#`, мультипроекции, `Fi` | фильтры и проекции |
|
|
15
|
+
| [`expression-bank/`](../../examples/expression-bank/) | Шаблоны на радикалах `R#` | [SYNTAX.md](../../docs/SYNTAX.md) «Радикалы» |
|
|
16
|
+
| [`template-apply/`](../../examples/template-apply/) | Подстановка `R#` → предметные домены | применение шаблонов |
|
|
17
|
+
|
|
18
|
+
Запуск и структура папок — [examples/README.md](../../examples/README.md).
|
|
19
|
+
|
|
3
20
|
## Схема: batch patch
|
|
4
21
|
|
|
5
22
|
```ts
|
|
@@ -16,6 +33,160 @@ const result = tool.applySchemaPatch({
|
|
|
16
33
|
console.log(result.summary.itemCount, result.success);
|
|
17
34
|
```
|
|
18
35
|
|
|
36
|
+
## Терм-функция вместо множества пар
|
|
37
|
+
|
|
38
|
+
Правила — [CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md), раздел «Терм-функция вместо множества пар».
|
|
39
|
+
|
|
40
|
+
### Было: граф и чтение через фильтр
|
|
41
|
+
|
|
42
|
+
```ts
|
|
43
|
+
tool.applySchemaPatch({
|
|
44
|
+
items: [
|
|
45
|
+
{ alias: 'X1', convention: 'узлы' },
|
|
46
|
+
{ alias: 'S1', definitionFormal: 'ℬ(X1×X1)', convention: 'ориентированные рёбра' },
|
|
47
|
+
{
|
|
48
|
+
alias: 'D1',
|
|
49
|
+
term: 'узел и его исходящие рёбра',
|
|
50
|
+
definitionFormal: 'I{(ξ,σ) | ξ:∈X1; σ:=Pr2(Fi1[{ξ}](S1))}'
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
alias: 'D2',
|
|
54
|
+
term: 'узел и число исходящих рёбер',
|
|
55
|
+
definitionFormal: 'I{(ξ,n) | α:∈D1; ξ:=pr1(α); n:=card(pr2(α))}'
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
alias: 'A1',
|
|
59
|
+
term: 'функциональность графика D1',
|
|
60
|
+
definitionFormal: '∀d1,d2∈D1 (pr1(d1)=pr1(d2) ⇒ pr2(d1)=pr2(d2))'
|
|
61
|
+
}
|
|
62
|
+
]
|
|
63
|
+
});
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Потребитель «степени» вынужден тащить пары и аксиому однозначности.
|
|
67
|
+
|
|
68
|
+
### Стало: терм-функции и вызовы
|
|
69
|
+
|
|
70
|
+
```ts
|
|
71
|
+
tool.applySchemaPatch({
|
|
72
|
+
items: [
|
|
73
|
+
{ alias: 'X1', convention: 'узлы' },
|
|
74
|
+
{ alias: 'S1', definitionFormal: 'ℬ(X1×X1)', convention: 'ориентированные рёбра' },
|
|
75
|
+
{
|
|
76
|
+
alias: 'F1',
|
|
77
|
+
term: 'исходящие соседи',
|
|
78
|
+
definitionFormal: '[ξ∈X1] Pr2(Fi1[{ξ}](S1))'
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
alias: 'F2',
|
|
82
|
+
term: 'исходящая степень',
|
|
83
|
+
definitionFormal: '[ξ∈X1] card(F1[ξ])'
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
alias: 'D3',
|
|
87
|
+
term: 'стоки',
|
|
88
|
+
definitionFormal: 'D{ξ∈X1 | F2[ξ]=0}'
|
|
89
|
+
}
|
|
90
|
+
]
|
|
91
|
+
});
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
`A1` не нужна: однозначность уже в `F1`/`F2`. Множество пар не вводится, пока оно само не станет предметом утверждения.
|
|
95
|
+
|
|
96
|
+
### Когда пары уместны
|
|
97
|
+
|
|
98
|
+
Многозначная связь «документ — автор» — отношение; `F1` даёт **множество** авторов, а `D1` — отношение на документах:
|
|
99
|
+
|
|
100
|
+
```ts
|
|
101
|
+
tool.applySchemaPatch({
|
|
102
|
+
items: [
|
|
103
|
+
{ alias: 'X1', convention: 'документы' },
|
|
104
|
+
{ alias: 'X2', convention: 'лица' },
|
|
105
|
+
{ alias: 'S1', definitionFormal: 'ℬ(X1×X2)', convention: 'авторство' },
|
|
106
|
+
{
|
|
107
|
+
alias: 'F1',
|
|
108
|
+
term: 'авторы документа',
|
|
109
|
+
definitionFormal: '[δ∈X1] Pr2(Fi1[{δ}](S1))'
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
alias: 'D1',
|
|
113
|
+
term: 'соавторские пары документов',
|
|
114
|
+
definitionFormal: 'D{(a,b)∈X1×X1 | a≠b & F1[a]∩F1[b]≠∅}'
|
|
115
|
+
}
|
|
116
|
+
]
|
|
117
|
+
});
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## `D{}` / `I{}` / `R{}` — когда что
|
|
121
|
+
|
|
122
|
+
Синтаксис — [SYNTAX.md](../../docs/SYNTAX.md).
|
|
123
|
+
|
|
124
|
+
| Генератор | Когда | Пример |
|
|
125
|
+
| ---------------------------- | ------------------------------------------ | ------------------------------------------------------------------------------------------ |
|
|
126
|
+
| `D{ξ∈A \| P(ξ)}` | Отбор по условию без пошагового построения | `D{ξ∈X1 \| F2[ξ]=0}` |
|
|
127
|
+
| `I{… \| блоки;}` | Нужны промежуточные присваивания / сборка | `I{(ξ,n) \| α:∈D1; ξ:=pr1(α); n:=card(pr2(α))}` — лучше заменить на `F#`, если это функция |
|
|
128
|
+
| `R{x:=base \| cond \| next}` | Рекурсивное наращивание | обход / итерация по правилу |
|
|
129
|
+
|
|
130
|
+
Антипаттерн: `I{(ξ,σ) \| ξ:∈A; σ:=E(ξ)}` для однозначного `E` → пиши `F ::= [ξ∈A] E(ξ)`.
|
|
131
|
+
|
|
132
|
+
## Конвенция: плохо / хорошо
|
|
133
|
+
|
|
134
|
+
У `X#` / `C#` / `S#` конвенция обязательна по смыслу (иначе `schemaMissingConvention`).
|
|
135
|
+
|
|
136
|
+
| Плохо | Хорошо |
|
|
137
|
+
| --------------------------------------------- | ----------------------------------------------------------------- |
|
|
138
|
+
| `convention: 'X1'` | `convention: 'сотрудники организации'` |
|
|
139
|
+
| `convention: 'отношение'` | `convention: 'ориентированные рёбра: пара (начало, конец)'` |
|
|
140
|
+
| пустая / копия термина без предметного смысла | кто элементы, как читать компоненты кортежа, какой порядок в паре |
|
|
141
|
+
|
|
142
|
+
Конвенция — предметный язык; она не заменяет формулу и не проверяется ЯРЭ.
|
|
143
|
+
|
|
144
|
+
## Типичные диагностики (было → стало)
|
|
145
|
+
|
|
146
|
+
Полный справочник — [DIAGNOSTICS.md](../../docs/DIAGNOSTICS.md). Исправляй диапазон `from`/`to` в формуле.
|
|
147
|
+
|
|
148
|
+
| `name` | Было | Стало |
|
|
149
|
+
| ------------------------------------------------- | -------------------------------------------------- | ---------------------------------------------------------------- |
|
|
150
|
+
| `typesNotEqual` | смешение ступеней в `∪` / `=` | выровняй типы или введи промежуточный терм |
|
|
151
|
+
| `globalNotTyped` | ссылка на ещё не введённый / нетипизированный `S1` | сначала поставщик в том же или предыдущем patch |
|
|
152
|
+
| `arithmeticNotSupported` / `orderingNotSupported` | `ξ+1` или `α<β` при `ξ∈X1` | `Z` или `C#` ([BASE-SELECTION.md](../../docs/BASE-SELECTION.md)) |
|
|
153
|
+
| `globalFuncParenCall` | `F1(ξ)` | `F1[ξ]` |
|
|
154
|
+
| `globalFuncWithoutArgs` | голое `F1` в формуле | `F1[…]` |
|
|
155
|
+
| `radicalUsage` | `R1` в теле формулы или как конституента | `R#` только в `[…]` у `F#`/`P#` |
|
|
156
|
+
| `schemaMissingConvention` | `X1` без конвенции | добавь предметную конвенцию |
|
|
157
|
+
| `schemaHomonym` | одинаковый термин у разных конституент | различай термины |
|
|
158
|
+
| `schemaDependencyCycle` | круг в определениях (`F3 → P1 → F3`) | разорви цикл: убери взаимные ссылки |
|
|
159
|
+
| `localOutOfScopeParentheses` | `∀a∈S P(a) & Q(a)` | `∀a∈S (P(a) & Q(a))` |
|
|
160
|
+
| `invalidFilterSyntax` | кривой `Fi` | `Fi1[{ξ}](S1)` / `Fi1,2[D1,D2](S1)` |
|
|
161
|
+
|
|
162
|
+
```ts
|
|
163
|
+
const analysis = tool.analyzeExpression({
|
|
164
|
+
expression: 'F1(ξ)', // ошибка: скобки вызова
|
|
165
|
+
cstType: CstType.TERM
|
|
166
|
+
});
|
|
167
|
+
// смотри analysis.diagnostics[].name, from, to
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## Scratch-проверка одной формулы
|
|
171
|
+
|
|
172
|
+
Без полной схемы задачи — минимальный стенд:
|
|
173
|
+
|
|
174
|
+
```ts
|
|
175
|
+
const tool = new RSToolAgent();
|
|
176
|
+
tool.applySchemaPatch({
|
|
177
|
+
items: [
|
|
178
|
+
{ alias: 'X1', convention: 'элементы' },
|
|
179
|
+
{ alias: 'S1', definitionFormal: 'ℬ(X1×X1)', convention: 'рёбра' }
|
|
180
|
+
]
|
|
181
|
+
});
|
|
182
|
+
const draft = tool.analyzeExpression({
|
|
183
|
+
expression: '[ξ∈X1] Pr2(Fi1[{ξ}](S1))',
|
|
184
|
+
cstType: CstType.FUNCTION
|
|
185
|
+
});
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Семантику значения — отдельная маленькая КМ ([MODEL-TESTING.md](../../docs/MODEL-TESTING.md)).
|
|
189
|
+
|
|
19
190
|
## `X#`, `C#` и `Z`
|
|
20
191
|
|
|
21
192
|
Выбор основания — [BASE-SELECTION.md](../../docs/BASE-SELECTION.md).
|
|
@@ -66,7 +237,7 @@ const scratch = tool.evaluate({ expression: '1+2', cstType: CstType.TERM });
|
|
|
66
237
|
const recalc = tool.recalculateModel();
|
|
67
238
|
```
|
|
68
239
|
|
|
69
|
-
## Экспорт / импорт
|
|
240
|
+
## Экспорт / импорт и Portal round-trip
|
|
70
241
|
|
|
71
242
|
```ts
|
|
72
243
|
const payload = tool.exportSession();
|
|
@@ -75,10 +246,30 @@ const restored = tool.importData(payload, 'session');
|
|
|
75
246
|
const schemaJson = tool.exportPortal({ kind: 'schema' });
|
|
76
247
|
const modelObj = tool.exportPortal({ kind: 'model', format: 'object' });
|
|
77
248
|
|
|
78
|
-
// Portal GET /api/rsforms/:id/details
|
|
79
|
-
const session = tool.importData(portalDetailsJsonString);
|
|
249
|
+
// Portal GET /api/rsforms/:id/details → строка или объект
|
|
250
|
+
const session = tool.importData(portalDetailsJsonString); // kind auto
|
|
251
|
+
tool.listDiagnostics();
|
|
252
|
+
// правки…
|
|
253
|
+
const forPortal = tool.exportPortal({ kind: 'schema' });
|
|
80
254
|
```
|
|
81
255
|
|
|
256
|
+
Не передавай `/details` с `kind: 'session'`. REST и curl — [PORTAL-API.md](../../docs/PORTAL-API.md).
|
|
257
|
+
|
|
258
|
+
## Образец текста ревью (не код)
|
|
259
|
+
|
|
260
|
+
После [воркфлоу ревью](GUIDE.md#ревью--оценка-готовой-кс) ответ может выглядеть так:
|
|
261
|
+
|
|
262
|
+
> **Вердикт:** схема покрывает роли и отношение подчинения; главный риск — вычисляемая «степень» задана графиком пар вместо терм-функции.
|
|
263
|
+
>
|
|
264
|
+
> **Диагностики:** 0 ошибок expression; 1 предупреждение schema (омоним термина).
|
|
265
|
+
>
|
|
266
|
+
> **Важно:** `D4` — множество пар «сотрудник — число подчинённых»; лучше `F#` с `card`.
|
|
267
|
+
> **Замечание:** у `S2` конвенция слишком общая («связь»).
|
|
268
|
+
>
|
|
269
|
+
> **Покрытие:** сущности и иерархия есть; нет высказывания о единственности руководителя.
|
|
270
|
+
>
|
|
271
|
+
> **Рекомендации:** (1) заменить `D4` на `F#`; (2) уточнить конвенцию `S2`; (3) при необходимости добавить `T#`. Правки не применял — жду подтверждения.
|
|
272
|
+
|
|
82
273
|
## Stdio (плоские params)
|
|
83
274
|
|
|
84
275
|
```json
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
- Анализатор: `@rsconcept/domain`.
|
|
11
11
|
- Stdio-обёртка: `npx rstool-wrapper`, JSON построчно.
|
|
12
12
|
- Node-клиент: `RSToolWrapperClient`.
|
|
13
|
+
- MCP: `@rsconcept/rstool-mcp` (tools в `snake_case` — [REFERENCE.md](REFERENCE.md)).
|
|
13
14
|
|
|
14
15
|
## Быстрый контракт для агента
|
|
15
16
|
|
|
@@ -20,6 +21,25 @@
|
|
|
20
21
|
- Модель: `setModelValues`, `evaluate`, `recalculateModel`.
|
|
21
22
|
- Перед сохранением сомнительной формулы — `analyzeExpression`.
|
|
22
23
|
|
|
24
|
+
## Задача → чтение
|
|
25
|
+
|
|
26
|
+
Не открывай все `docs/` сразу. Выбери строку по запросу пользователя, прочитай **минимум**, остальное — только если упрёшься в пробел.
|
|
27
|
+
|
|
28
|
+
| Задача пользователя | Читать (минимум) | Не читать сразу |
|
|
29
|
+
| :------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------- |
|
|
30
|
+
| Собрать / существенно развить КС из текста | этот GUIDE → [концептуализация](#концептуализация-кс-из-содержания-источника); [CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md); [BASE-SELECTION.md](../../docs/BASE-SELECTION.md); при сомнении — [EXAMPLES.md](EXAMPLES.md) | PORTAL-API целиком; TYPIFICATION целиком |
|
|
31
|
+
| Оценить / отревьюить готовую КС (без запроса «перепиши») | этот GUIDE → [ревью / оценка](#ревью--оценка-готовой-кс); [чеклист ревью](#ревью-концептуальной-схемы); [CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md); при импорте — [PORTAL-API.md](../../docs/PORTAL-API.md) | EXAMPLES с batch patch; полный SYNTAX |
|
|
32
|
+
| Точечные правки существующей схемы | этот GUIDE → [редактирование](#редактирование-и-проверка-схемы); [REFERENCE.md](REFERENCE.md) при вызовах | CONCEPTUAL-SCHEMA целиком |
|
|
33
|
+
| Починить формулу / диагностики | этот GUIDE → [цикл диагностик](#цикл-диагностик); [DIAGNOSTICS.md](../../docs/DIAGNOSTICS.md); [EXAMPLES.md](EXAMPLES.md) «типичные диагностики» | CONCEPTUAL-SCHEMA; PORTAL-API |
|
|
34
|
+
| Импорт / правка по ссылке Portal | этот GUIDE → [Portal](#оценка-или-правка-кс-из-portal); [PORTAL-API.md](../../docs/PORTAL-API.md) | SYNTAX; BASE-SELECTION |
|
|
35
|
+
| Проверить смысл на данных / КМ | этот GUIDE → [КМ](#проверка-на-маленькой-км); [MODEL-TESTING.md](../../docs/MODEL-TESTING.md) | DOMAIN/ОСС; CONCEPTUAL-SCHEMA |
|
|
36
|
+
| Объяснить синтаксис / генераторы / `F#`/`P#` | [SYNTAX.md](../../docs/SYNTAX.md); при необходимости [EXAMPLES.md](EXAMPLES.md) | воркфлоу сессий |
|
|
37
|
+
| Разобрать типизацию / ступени | [TYPIFICATION.md](../../docs/TYPIFICATION.md) | PORTAL-API |
|
|
38
|
+
| Вызовы API / stdio / MCP | [REFERENCE.md](REFERENCE.md) | docs языка |
|
|
39
|
+
| Термины КС, ядро/тело, не путать ярлыки | [DOMAIN.md](../../docs/DOMAIN.md) | — |
|
|
40
|
+
|
|
41
|
+
Полный индекс справочников — [ниже](#что-читать) и в [docs/README.md](../../docs/README.md).
|
|
42
|
+
|
|
23
43
|
## Границы правок: не трогай пакет rstool без запроса
|
|
24
44
|
|
|
25
45
|
Задача по КС, Portal или источнику пользователя **не означает** правку дерева `rsconcept/rstool/`.
|
|
@@ -45,10 +65,10 @@ pnpm --filter @rsconcept/rstool exec tsx path/to/your/build-schema.ts
|
|
|
45
65
|
|
|
46
66
|
Пути — относительно этого файла.
|
|
47
67
|
|
|
48
|
-
- API, методы, stdio: [REFERENCE.md](REFERENCE.md).
|
|
49
|
-
-
|
|
68
|
+
- API, методы, stdio, MCP: [REFERENCE.md](REFERENCE.md).
|
|
69
|
+
- Примеры и антипаттерны: [EXAMPLES.md](EXAMPLES.md).
|
|
50
70
|
- Термины предметной области: [../../docs/DOMAIN.md](../../docs/DOMAIN.md).
|
|
51
|
-
- **`X#` / `C#` / `Z`:** [../../docs/BASE-SELECTION.md](../../docs/BASE-SELECTION.md)
|
|
71
|
+
- **`X#` / `C#` / `Z`:** [../../docs/BASE-SELECTION.md](../../docs/BASE-SELECTION.md).
|
|
52
72
|
- Концептуализация, создание схемы: [../../docs/CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md).
|
|
53
73
|
- Конституенты и валидация: [../../docs/CONSTITUENTA.md](../../docs/CONSTITUENTA.md).
|
|
54
74
|
- Синтаксис ЯРЭ: [../../docs/SYNTAX.md](../../docs/SYNTAX.md).
|
|
@@ -56,7 +76,7 @@ pnpm --filter @rsconcept/rstool exec tsx path/to/your/build-schema.ts
|
|
|
56
76
|
- Проверка определений на КМ: [../../docs/MODEL-TESTING.md](../../docs/MODEL-TESTING.md).
|
|
57
77
|
- Диагностики: [../../docs/DIAGNOSTICS.md](../../docs/DIAGNOSTICS.md).
|
|
58
78
|
- REST Portal: [../../docs/PORTAL-API.md](../../docs/PORTAL-API.md).
|
|
59
|
-
- Репозиторий Portal
|
|
79
|
+
- Репозиторий Portal: [ConceptPortal на GitHub](https://github.com/IRBorisov/ConceptPortal).
|
|
60
80
|
|
|
61
81
|
## Воркфлоу
|
|
62
82
|
|
|
@@ -86,6 +106,8 @@ pnpm --filter @rsconcept/rstool exec tsx path/to/your/build-schema.ts
|
|
|
86
106
|
Portal JSON из `/details` не является форматом `exportSession`. Используй `importData(payload)` —
|
|
87
107
|
kind `auto` (default) определит `portal-details` или `portal-schema`. Явный kind: `'portal-details'`, `'portal-schema'`, `'session'`.
|
|
88
108
|
|
|
109
|
+
Если задача — **оценка** схемы из Portal, а не правка: после импорта иди в [ревью / оценка](#ревью--оценка-готовой-кс), не начинай массовый refactor.
|
|
110
|
+
|
|
89
111
|
### Концептуализация (КС из содержания источника)
|
|
90
112
|
|
|
91
113
|
Когда нужно построить или существенно развить КС по тексту ПО, требованиям или предметному описанию. Правила редукции, слоёв и паттернов — [CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md).
|
|
@@ -93,7 +115,7 @@ kind `auto` (default) определит `portal-details` или `portal-schema`
|
|
|
93
115
|
1. Собери словарь: неопределяемые понятия, ключевые отношения, сценарий синтеза.
|
|
94
116
|
2. Добавь независимые неопределяемые понятия `X#`, `C#`, `S#` с конвенциями из источника (не копируй дословно). Для выбора `X#` vs `C#` vs `Z` — [BASE-SELECTION.md](../../docs/BASE-SELECTION.md).
|
|
95
117
|
3. Всё, что выводится из уже введённых понятий, оформляй как `D#` / `F#` / `P#`, а не как новое `X#` / `C#` / `S#`.
|
|
96
|
-
4. Вводи промежуточные `D#`, `F#`, `P#` для проекций, функциональных связей и повторяющихся фрагментов формул.
|
|
118
|
+
4. Вводи промежуточные `D#`, `F#`, `P#` для проекций, функциональных связей и повторяющихся фрагментов формул. Если зависимость имеет вид «для `ξ` вычислить значение», оформляй её как `F#`, а не как множество пар `I{(ξ,σ)|…}` ([CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md), «Терм-функция вместо множества пар»).
|
|
97
119
|
5. Добавь `A#` и `T#` после терминов, на которые они опираются.
|
|
98
120
|
6. Перед каждым patch — `analyzeExpression`; при ошибках — [цикл диагностик](#цикл-диагностик).
|
|
99
121
|
7. Сомнительную семантику проверь на маленькой КМ ([цикл КМ](#проверка-на-маленькой-км), [MODEL-TESTING.md](../../docs/MODEL-TESTING.md)).
|
|
@@ -101,9 +123,30 @@ kind `auto` (default) определит `portal-details` или `portal-schema`
|
|
|
101
123
|
|
|
102
124
|
Дальше — обычное [редактирование и проверка](#редактирование-и-проверка-схемы): commit, export.
|
|
103
125
|
|
|
126
|
+
### Ревью / оценка готовой КС
|
|
127
|
+
|
|
128
|
+
Когда пользователь просит **оценить**, **проревьюить**, **найти проблемы** в уже существующей схеме (сессия, JSON, ссылка Portal) — и **не** просит сразу переписать её.
|
|
129
|
+
|
|
130
|
+
**Правило:** без явного запроса на правку не делай массовый рефакторинг и не заменяй схему «улучшенной версией». Сначала отчёт; правки — только по согласованию или если пользователь сразу сказал «исправь».
|
|
131
|
+
|
|
132
|
+
1. Загрузи схему: текущая сессия, `importData`, или Portal → [PORTAL-API.md](../../docs/PORTAL-API.md).
|
|
133
|
+
2. `listDiagnostics()` — раздели `expression` / `schema` / `model`; зафиксируй ошибки и предупреждения.
|
|
134
|
+
3. `getSessionState('summary')` — обзор состава; при необходимости `full` для формул.
|
|
135
|
+
4. Структурный проход по [чеклисту ревью](#ревью-концептуальной-схемы) и [CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md):
|
|
136
|
+
- неопределяемые vs производные (`S#` там, где должно быть `D#`/`F#`/`P#`);
|
|
137
|
+
- `X#` / `C#` / `Z` ([BASE-SELECTION.md](../../docs/BASE-SELECTION.md));
|
|
138
|
+
- терм-функции vs множества пар;
|
|
139
|
+
- радикалы `R#` не объявлены конституентами;
|
|
140
|
+
- покрытие задачи vs избыточность.
|
|
141
|
+
5. Severity в отчёте:
|
|
142
|
+
- **блокер** — диагностики `error`, схема не анализируется / ломает вычисление;
|
|
143
|
+
- **важно** — нарушение правил проектирования (лишнее `S#`, график вместо `F#`, смешение экспликаций);
|
|
144
|
+
- **замечание** — стиль, именование, возможные упрощения, пробелы покрытия.
|
|
145
|
+
6. Ответ — по [шаблону ревью](#шаблон-ответа-ревью). Предлагай конкретные правки списком; применяй их только по запросу.
|
|
146
|
+
|
|
104
147
|
### Цикл диагностик
|
|
105
148
|
|
|
106
|
-
Когда `analysis.success === false` или `listDiagnostics` не пуст. Коды и типичные ошибки — [DIAGNOSTICS.md](../../docs/DIAGNOSTICS.md).
|
|
149
|
+
Когда `analysis.success === false` или `listDiagnostics` не пуст. Коды и типичные ошибки — [DIAGNOSTICS.md](../../docs/DIAGNOSTICS.md); короткие «было → стало» — [EXAMPLES.md](EXAMPLES.md).
|
|
107
150
|
|
|
108
151
|
1. Вызови `listDiagnostics()` — смотри `kind`: `expression` (формула), `schema` (омонимы, дубликаты, термин/конвенция), `model` (интерпретация).
|
|
109
152
|
2. Для черновика формулы — `analyzeExpression` (без сохранения).
|
|
@@ -134,6 +177,10 @@ kind `auto` (default) определит `portal-details` или `portal-schema`
|
|
|
134
177
|
|
|
135
178
|
## Формат ответа агента
|
|
136
179
|
|
|
180
|
+
Выбери шаблон по типу задачи. Не вставляй большой JSON в чат без запроса пользователя.
|
|
181
|
+
|
|
182
|
+
### Сборка / правка схемы
|
|
183
|
+
|
|
137
184
|
В конце работы сообщи:
|
|
138
185
|
|
|
139
186
|
- что изменено в схеме или модели;
|
|
@@ -141,7 +188,28 @@ kind `auto` (default) определит `portal-details` или `portal-schema`
|
|
|
141
188
|
- какой экспорт получен: сессия / схема для Portal / модель для Portal;
|
|
142
189
|
- какие проверки выполнены: анализ выражений / вычисление / пересчёт модели / тесты.
|
|
143
190
|
|
|
144
|
-
|
|
191
|
+
### Шаблон ответа: ревью
|
|
192
|
+
|
|
193
|
+
1. **Краткий вердикт** (1–2 предложения): пригодна ли схема к задаче, главный риск.
|
|
194
|
+
2. **Диагностики:** число ошибок / предупреждений по `expression` / `schema` / `model` (без полного JSON).
|
|
195
|
+
3. **Находки** списком: блокер → важно → замечание; у каждой — имя конституенты и суть.
|
|
196
|
+
4. **Покрытие:** что из задачи отражено; чего не хватает.
|
|
197
|
+
5. **Рекомендации:** конкретные правки; не применяй их без запроса.
|
|
198
|
+
6. **Проверки:** что уже сделано (import, listDiagnostics, выборочный анализ).
|
|
199
|
+
|
|
200
|
+
### Шаблон ответа: диагностики
|
|
201
|
+
|
|
202
|
+
- какие конституенты / формулы затронуты;
|
|
203
|
+
- `name` диагностики и смысл простым языком;
|
|
204
|
+
- что изменено в формальном определении (или почему правка не нужна);
|
|
205
|
+
- повторная проверка: чисто / осталось.
|
|
206
|
+
|
|
207
|
+
### Шаблон ответа: объяснение формулы
|
|
208
|
+
|
|
209
|
+
- роль конституенты и термин;
|
|
210
|
+
- формула как есть;
|
|
211
|
+
- по шагам: что вычисляется / утверждается;
|
|
212
|
+
- на какие понятия опирается; типизация.
|
|
145
213
|
|
|
146
214
|
### Язык ответа
|
|
147
215
|
|
|
@@ -187,7 +255,7 @@ kind `auto` (default) определит `portal-details` или `portal-schema`
|
|
|
187
255
|
|
|
188
256
|
### Ревью концептуальной схемы
|
|
189
257
|
|
|
190
|
-
Перед завершением
|
|
258
|
+
Перед завершением концептуализации, крупного изменения или как проход в [воркфлоу ревью](#ревью--оценка-готовой-кс). Правила — [CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md).
|
|
191
259
|
|
|
192
260
|
- [ ] Атрибутивная и родоструктурная экспликации не смешаны без явного запроса.
|
|
193
261
|
- [ ] Нет избыточной проверки принадлежности к собственной типизации (`x∈X1`, если `x` уже в `X1`).
|
|
@@ -196,5 +264,8 @@ kind `auto` (default) определит `portal-details` или `portal-schema`
|
|
|
196
264
|
- [ ] Покрыты главные сущности, роли, отношения, утверждения.
|
|
197
265
|
- [ ] В текстовых определениях используются только понятия из схемы.
|
|
198
266
|
- [ ] Повторяющиеся части формальных определений вынесены в производные понятия `D#` и `F#`.
|
|
267
|
+
- [ ] Вычисляемые зависимости «аргумент → значение» оформлены как `F#` с вызовами, а не как пары / тройки + `Pr`/`Fi` (см. [CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md), «Терм-функция вместо множества пар»).
|
|
268
|
+
- [ ] Пары / `I{(ξ,σ)|…}` оставлены только для истинных отношений, графиков как объектов или многозначных связей.
|
|
199
269
|
- [ ] `R#` в `[…]` у `F#` / `P#` не считается пропущенной конституентой; радикалы не добавляют в схему как `X#` / `S#` / `D#`.
|
|
200
270
|
- [ ] Сомнительная семантика проверена на маленькой КМ при наличии тестовых данных.
|
|
271
|
+
- [ ] При чистом ревью: отчёт по [шаблону](#шаблон-ответа-ревью) выдан **до** любых массовых правок.
|