@rsconcept/rstool 0.10.3 → 1.0.1
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 +61 -33
- package/dist/agent-workflow-Gk0Vfnv1.d.ts +64 -0
- package/dist/analysis-LLnPhmGa.d.ts +23 -0
- package/dist/{common-DxLg3eXX.d.ts → common-DHJalS-Q.d.ts} +6 -1
- package/dist/constituenta-DnGR6bnM.d.ts +54 -0
- package/dist/diagnostic-D9yl_mEL.d.ts +19 -0
- package/dist/evaluation-Cns8BFm4.d.ts +31 -0
- package/dist/index.d.ts +11 -11
- package/dist/index.js +1 -2
- package/dist/mappers/model-adapter.d.ts +3 -3
- package/dist/mappers/schema-adapter.d.ts +4 -4
- package/dist/mappers/types.d.ts +6 -2
- package/dist/mappers/types.js +2 -0
- package/dist/mappers/types.js.map +1 -1
- package/dist/{model-value-SFAVj0dw.d.ts → model-value-BbonPzMz.d.ts} +14 -3
- package/dist/models/agent-workflow.d.ts +2 -0
- package/dist/models/agent-workflow.js +1 -0
- package/dist/models/analysis.d.ts +1 -1
- package/dist/models/common.d.ts +1 -1
- package/dist/models/constituenta.d.ts +2 -2
- package/dist/models/diagnostic.d.ts +1 -1
- package/dist/models/evaluation.d.ts +2 -2
- package/dist/models/index.d.ts +11 -11
- package/dist/models/index.js +2 -2
- package/dist/models/model-value.d.ts +2 -2
- package/dist/models/rstool-agent.d.ts +1 -1
- package/dist/models/rstool-agent.js +1 -1
- package/dist/models/session.d.ts +1 -1
- package/dist/models/tool-contract.d.ts +2 -2
- package/dist/models/tool-contract.js +2 -1
- package/dist/models/tool-contract.js.map +1 -1
- package/dist/models-Bw6Uum8i.js +685 -0
- package/dist/models-Bw6Uum8i.js.map +1 -0
- package/dist/rstool-agent-D2cQze_b.d.ts +71 -0
- package/dist/session/session-store.d.ts +18 -5
- package/dist/session/session-store.js +1 -64
- package/dist/{session-BPgsE80c.d.ts → session-ChexW8i7.d.ts} +11 -8
- package/dist/tool-contract-0uRGhEfW.d.ts +164 -0
- package/dist/wrapper/client.d.ts +23 -0
- package/dist/wrapper/client.js +17 -0
- package/dist/wrapper/client.js.map +1 -1
- package/dist/wrapper/stdio-wrapper.js +75 -63
- package/dist/wrapper/stdio-wrapper.js.map +1 -1
- package/docs/CONSTITUENTA.md +2 -2
- package/docs/DIAGNOSTICS.md +6 -5
- package/docs/MODEL-TESTING.md +3 -3
- package/docs/PORTAL-API.md +24 -18
- package/examples/README.md +1 -1
- package/examples/agent-client.ts +11 -41
- package/examples/build-chocolate-nim-rsform.ts +21 -70
- package/examples/chocolate-nim/build-rsform.ts +23 -18
- package/examples/chocolate-nim/build-rsmodel.ts +10 -12
- package/examples/chocolate-nim/rsform-session.json +290 -290
- package/examples/chocolate-nim/rsmodel-session.json +291 -291
- package/examples/expression-bank/bank-constituents.ts +304 -53
- package/examples/expression-bank/build-rsform.ts +19 -16
- package/examples/expression-bank/rsform-session.json +1551 -1551
- package/examples/kinship/build-rsform.ts +23 -18
- package/examples/kinship/build-rsmodel.ts +16 -16
- package/examples/kinship/rsform-session.json +219 -219
- package/examples/kinship/rsmodel-session.json +221 -221
- package/examples/kinship/session.ts +19 -21
- package/examples/movd/build-rsform.ts +23 -18
- package/examples/movd/build-rsmodel.ts +18 -20
- package/examples/movd/rsform-session.json +262 -262
- package/examples/movd/rsmodel-session.json +264 -264
- package/examples/sample/build-rsform.ts +18 -51
- package/examples/sample/build-rsmodel.ts +25 -44
- package/examples/sample/rsform-session.json +10 -7
- package/examples/sample/rsmodel-session.json +36 -33
- package/examples/template-apply/build-rsform.ts +27 -24
- package/examples/template-apply/rsform-session.json +48 -48
- package/package.json +4 -2
- package/skills/rstool-helper/EXAMPLES.md +44 -116
- package/skills/rstool-helper/GUIDE.md +40 -25
- package/skills/rstool-helper/REFERENCE.md +40 -177
- package/src/index.ts +24 -17
- package/src/mappers/portal-adapter.ts +49 -0
- package/src/mappers/types.ts +4 -0
- package/src/models/agent-workflow.ts +66 -0
- package/src/models/analysis.ts +7 -0
- package/src/models/common.ts +7 -0
- package/src/models/constituenta.ts +24 -6
- package/src/models/diagnostic.ts +4 -0
- package/src/models/evaluation.ts +11 -0
- package/src/models/import-detect.test.ts +66 -0
- package/src/models/import-detect.ts +42 -0
- package/src/models/import-export.ts +24 -0
- package/src/models/index.ts +22 -14
- package/src/models/model-value.ts +12 -0
- package/src/models/portal-json.test.ts +38 -0
- package/src/models/portal-json.ts +54 -1
- package/src/models/rstool-agent.test.ts +698 -146
- package/src/models/rstool-agent.ts +392 -92
- package/src/models/session.ts +8 -5
- package/src/models/tool-contract.ts +81 -42
- package/src/session/batch-apply.test.ts +123 -0
- package/src/session/batch-apply.ts +82 -0
- package/src/session/persistence.test.ts +63 -0
- package/src/session/persistence.ts +69 -0
- package/src/session/session-store.ts +76 -6
- package/src/wrapper/client.test.ts +58 -0
- package/src/wrapper/client.ts +23 -0
- package/src/wrapper/stdio-handler.test.ts +101 -0
- package/src/wrapper/stdio-handler.ts +195 -0
- package/src/wrapper/stdio-wrapper.ts +4 -187
- package/dist/analysis-JiwOYDKx.d.ts +0 -16
- package/dist/constituenta-Dnd6iToB.d.ts +0 -36
- package/dist/diagnostic-BMYvciz8.d.ts +0 -15
- package/dist/evaluation-CCVYH0wA.d.ts +0 -21
- package/dist/index-uhkmwruf.d.ts +0 -46
- package/dist/rstool-agent-BZi5jO1y.js +0 -158
- package/dist/rstool-agent-BZi5jO1y.js.map +0 -1
- package/dist/rstool-agent-pRaPnZay.d.ts +0 -35
- package/dist/session/session-store.js.map +0 -1
- package/dist/tool-contract-n1ghUOrK.d.ts +0 -32
|
@@ -1,161 +1,89 @@
|
|
|
1
|
-
#
|
|
1
|
+
# RSLang и rstool — примеры (контракт 2.0)
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
## Минимальная сессия
|
|
3
|
+
## Схема: batch patch
|
|
6
4
|
|
|
7
5
|
```ts
|
|
8
6
|
import { CstType, RSToolAgent } from '@rsconcept/rstool';
|
|
9
7
|
|
|
10
8
|
const tool = new RSToolAgent();
|
|
11
|
-
const { sessionId } = tool.createSession();
|
|
12
|
-
|
|
13
|
-
tool.addOrUpdateConstituenta(sessionId, {
|
|
14
|
-
draft: { id: 1, alias: 'X1', cstType: CstType.BASE, definitionFormal: '' }
|
|
15
|
-
});
|
|
16
9
|
|
|
17
|
-
tool.
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
cstType: CstType.STRUCTURED,
|
|
22
|
-
definitionFormal: 'ℬ(X1×X1)',
|
|
23
|
-
convention: 'Множество пар: родитель и его ребёнок из людей. Порядок в паре задаётся конвенцией.'
|
|
24
|
-
}
|
|
10
|
+
const result = tool.applySchemaPatch({
|
|
11
|
+
initial: { title: 'Example' },
|
|
12
|
+
commitMessage: 'initial',
|
|
13
|
+
items: [{ alias: 'X1' }, { alias: 'S1', definitionFormal: 'ℬ(X1×X1)' }, { alias: 'D1', definitionFormal: 'Pr1(S1)' }]
|
|
25
14
|
});
|
|
26
15
|
|
|
27
|
-
|
|
28
|
-
draft: { id: 3, alias: 'D1', cstType: CstType.TERM, definitionFormal: 'Pr1(S1)' }
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
console.log(state.analysis.success, diagnostics.length);
|
|
16
|
+
console.log(result.summary.itemCount, result.success);
|
|
32
17
|
```
|
|
33
18
|
|
|
34
|
-
## Анализ
|
|
35
|
-
|
|
36
|
-
Черновой анализ, когда синтаксис или `cstType` под вопросом.
|
|
19
|
+
## Анализ без сохранения
|
|
37
20
|
|
|
38
21
|
```ts
|
|
39
|
-
const analysis = tool.analyzeExpression(
|
|
22
|
+
const analysis = tool.analyzeExpression({
|
|
40
23
|
expression: 'Pr1(S1)',
|
|
41
24
|
cstType: CstType.TERM
|
|
42
25
|
});
|
|
43
|
-
|
|
44
|
-
if (!analysis.success) {
|
|
45
|
-
console.log(analysis.diagnostics.map(({ code, from, to }) => ({ code, from, to })));
|
|
46
|
-
}
|
|
47
26
|
```
|
|
48
27
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
## Вычисление
|
|
28
|
+
## Состояние сессии
|
|
52
29
|
|
|
53
30
|
```ts
|
|
54
|
-
tool.
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
const scratch = tool.evaluateExpression(sessionId, {
|
|
60
|
-
expression: '1+2',
|
|
61
|
-
cstType: CstType.TERM
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
console.log(scratch.success, scratch.value); // true, 3
|
|
31
|
+
const summary = tool.getSessionState(); // compact
|
|
32
|
+
const full = tool.getSessionState('full'); // SessionState clone
|
|
33
|
+
const diags = tool.listDiagnostics();
|
|
65
34
|
```
|
|
66
35
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
## Семантический smoke-тест
|
|
70
|
-
|
|
71
|
-
Синтаксис верен, но смысл неочевиден — собери маленькую модель и проверь значение.
|
|
36
|
+
## Модель и вычисление
|
|
72
37
|
|
|
73
38
|
```ts
|
|
74
|
-
|
|
75
|
-
|
|
39
|
+
await tool.setModelValues({
|
|
40
|
+
set: [{ target: 1, value: { '0': 'alice', '1': 'bob' } }]
|
|
41
|
+
});
|
|
76
42
|
|
|
77
|
-
const
|
|
78
|
-
const {
|
|
43
|
+
const evalResult = tool.evaluate({ constituentId: 2 });
|
|
44
|
+
const scratch = tool.evaluate({ expression: '1+2', cstType: CstType.TERM });
|
|
45
|
+
const recalc = tool.recalculateModel();
|
|
46
|
+
```
|
|
79
47
|
|
|
80
|
-
|
|
81
|
-
draft: { id: 1, alias: 'X1', cstType: CstType.BASE, definitionFormal: '' }
|
|
82
|
-
});
|
|
83
|
-
tool.addOrUpdateConstituenta(sessionId, {
|
|
84
|
-
draft: { id: 2, alias: 'S1', cstType: CstType.STRUCTURED, definitionFormal: 'ℬ(X1×X1)' }
|
|
85
|
-
});
|
|
86
|
-
tool.addOrUpdateConstituenta(sessionId, {
|
|
87
|
-
draft: { id: 3, alias: 'D1', cstType: CstType.TERM, definitionFormal: 'Pr1(S1)' }
|
|
88
|
-
});
|
|
48
|
+
## Экспорт / импорт
|
|
89
49
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
{
|
|
94
|
-
target: 2,
|
|
95
|
-
value: [
|
|
96
|
-
[TUPLE_ID, 0, 1],
|
|
97
|
-
[TUPLE_ID, 0, 2]
|
|
98
|
-
]
|
|
99
|
-
}
|
|
100
|
-
]
|
|
101
|
-
});
|
|
50
|
+
```ts
|
|
51
|
+
const payload = tool.exportSession();
|
|
52
|
+
const restored = tool.importData(payload, 'session');
|
|
102
53
|
|
|
103
|
-
const
|
|
54
|
+
const schemaJson = tool.exportPortal({ kind: 'schema' });
|
|
55
|
+
const modelObj = tool.exportPortal({ kind: 'model', format: 'object' });
|
|
104
56
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
}
|
|
57
|
+
// Portal GET /api/rsforms/:id/details
|
|
58
|
+
const session = tool.importData(portalDetailsJsonString);
|
|
108
59
|
```
|
|
109
60
|
|
|
110
|
-
|
|
61
|
+
## Stdio (плоские params)
|
|
111
62
|
|
|
112
|
-
|
|
63
|
+
```json
|
|
64
|
+
{ "id": "1", "method": "applySchemaPatch", "params": { "items": [{ "alias": "X1" }] } }
|
|
65
|
+
{ "id": "2", "method": "setModelValues", "params": { "set": [{ "target": 1, "value": { "0": "a" } }] } }
|
|
66
|
+
{ "id": "3", "method": "evaluate", "params": { "constituentId": 2 } }
|
|
67
|
+
```
|
|
113
68
|
|
|
114
|
-
|
|
69
|
+
## Node-клиент
|
|
115
70
|
|
|
116
71
|
```ts
|
|
117
|
-
import { CstType } from '@rsconcept/rstool';
|
|
118
72
|
import { RSToolWrapperClient } from '@rsconcept/rstool/wrapper';
|
|
119
73
|
|
|
74
|
+
// Из checkout rstool: по умолчанию запускает `npm run wrapper` в текущем cwd.
|
|
75
|
+
// Для установленного пакета: new RSToolWrapperClient({ command: 'npx', args: ['rstool-wrapper'] }).
|
|
120
76
|
const client = new RSToolWrapperClient();
|
|
121
77
|
await client.waitUntilReady();
|
|
122
78
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
await client.call('addOrUpdateConstituenta', {
|
|
126
|
-
sessionId,
|
|
127
|
-
input: {
|
|
128
|
-
draft: { id: 1, alias: 'X1', cstType: CstType.BASE, definitionFormal: '' }
|
|
129
|
-
}
|
|
79
|
+
await client.call('applySchemaPatch', {
|
|
80
|
+
items: [{ alias: 'X1' }, { alias: 'D1', definitionFormal: '1+2' }]
|
|
130
81
|
});
|
|
131
82
|
|
|
132
|
-
|
|
133
|
-
|
|
83
|
+
await client.call('setModelValues', {
|
|
84
|
+
set: [{ target: 1, value: { 0: 'zero', 1: 'one' } }]
|
|
85
|
+
});
|
|
134
86
|
|
|
87
|
+
const evalResult = await client.call('evaluate', { constituentId: 2 });
|
|
135
88
|
await client.close();
|
|
136
89
|
```
|
|
137
|
-
|
|
138
|
-
Ручной stdio — один JSON-запрос на строку:
|
|
139
|
-
|
|
140
|
-
```jsonl
|
|
141
|
-
{ "id": "1", "method": "createSession", "params": {} }
|
|
142
|
-
{ "id": "2", "method": "addOrUpdateConstituenta", "params": { "sessionId": "...", "input": { "draft": { "id": 1, "alias": "X1", "cstType": "basic", "definitionFormal": "" } } } }
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
## Экспорт / импорт
|
|
146
|
-
|
|
147
|
-
```ts
|
|
148
|
-
const payload = tool.exportSession(sessionId);
|
|
149
|
-
const restored = tool.importSession(payload);
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
Экспорт включает состояние сессии и значения модели.
|
|
153
|
-
|
|
154
|
-
Файлы для загрузки пользователем в существующий объект Portal:
|
|
155
|
-
|
|
156
|
-
```ts
|
|
157
|
-
const schemaJson = tool.exportPortalSchema(sessionId);
|
|
158
|
-
const modelJson = tool.exportPortalModel(sessionId);
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
`schemaJson` — на странице схемы, `modelJson` — на странице модели, через **Load from JSON**.
|
|
@@ -4,18 +4,27 @@
|
|
|
4
4
|
|
|
5
5
|
**RSLang** — формальная нотация концептуальных схем: понятия, отношения, операции, утверждения. Основа: принадлежность `x∈y`, теоретико-множественные и логические выражения, типизация.
|
|
6
6
|
|
|
7
|
-
**rstool** — API агента для сессий,
|
|
7
|
+
**rstool** — API агента для сессий, редактирования схемы, анализа, диагностик, значений модели, вычисления, экспорта/импорта.
|
|
8
8
|
|
|
9
9
|
- Библиотека: `@rsconcept/rstool`.
|
|
10
10
|
- Анализатор: `@rsconcept/domain`.
|
|
11
11
|
- Stdio-обёртка: `npx rstool-wrapper`, JSON построчно.
|
|
12
12
|
- Node-клиент: `RSToolWrapperClient`.
|
|
13
13
|
|
|
14
|
+
## Быстрый контракт для агента
|
|
15
|
+
|
|
16
|
+
- Library API: `tool.applySchemaPatch(input, sessionId?)` — единственный путь правки схемы.
|
|
17
|
+
- Stdio/MCP: **плоские** `params` — поля метода и optional `sessionId` на одном уровне (без `params.input`).
|
|
18
|
+
- Состояние: `getSessionState()` (summary) или `getSessionState('full')`.
|
|
19
|
+
- Импорт/экспорт Portal: `importData`, `exportPortal({ kind })`.
|
|
20
|
+
- Модель: `setModelValues`, `evaluate`, `recalculateModel`.
|
|
21
|
+
- Перед сохранением сомнительной формулы — `analyzeExpression`.
|
|
22
|
+
|
|
14
23
|
## Что читать
|
|
15
24
|
|
|
16
25
|
Пути — относительно этого файла.
|
|
17
26
|
|
|
18
|
-
- API, методы, stdio
|
|
27
|
+
- API, методы, stdio: [REFERENCE.md](REFERENCE.md).
|
|
19
28
|
- Примеры: [EXAMPLES.md](EXAMPLES.md).
|
|
20
29
|
- Термины предметной области: [../../docs/DOMAIN.md](../../docs/DOMAIN.md).
|
|
21
30
|
- Концептуализация, создание схемы: [../../docs/CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md).
|
|
@@ -36,16 +45,16 @@
|
|
|
36
45
|
|
|
37
46
|
Когда схема уже есть и нужны точечные правки, новые конституенты или проверка формул.
|
|
38
47
|
|
|
39
|
-
1.
|
|
40
|
-
2. Развивай схему
|
|
41
|
-
3.
|
|
42
|
-
4. Перед
|
|
48
|
+
1. Продолжи текущую сессию или вызови `ensureSession`; большинство методов создают сессию лениво.
|
|
49
|
+
2. Развивай схему через `applySchemaPatch`: можно опускать `id` и `cstType` для стандартных alias `X/C/S/D/A/F/P`.
|
|
50
|
+
3. Для пачки конституент передавай все элементы вместе — `applySchemaPatch` упорядочит поставщиков раньше потребителей.
|
|
51
|
+
4. Перед patch в `applySchemaPatch` при сомнении вызывай `analyzeExpression`.
|
|
43
52
|
5. Исправляй диагностики по диапазону `from` / `to` в `definitionFormal` ([DIAGNOSTICS.md](../../docs/DIAGNOSTICS.md)).
|
|
44
53
|
6. При сомнении в семантике собери маленькую КМ и проверь тестовые данные ([цикл КМ](#проверка-на-маленькой-км)).
|
|
45
|
-
7. Задай
|
|
46
|
-
8. `commitStep`, когда состояние согласовано.
|
|
47
|
-
9. Сохрани: `exportSession` / `
|
|
48
|
-
10. Для загрузки в Portal: `
|
|
54
|
+
7. Задай значения модели: `setModelValues`; вычисли: `evaluate`, `recalculateModel`.
|
|
55
|
+
8. `commitStep` или `commitMessage` в `applySchemaPatch`, когда состояние согласовано.
|
|
56
|
+
9. Сохрани: `exportSession` / `importData`.
|
|
57
|
+
10. Для загрузки в Portal: `exportPortal({ kind: 'schema' })` или `{ kind: 'model' }`.
|
|
49
58
|
|
|
50
59
|
### Оценка или правка КС из Portal
|
|
51
60
|
|
|
@@ -56,13 +65,8 @@
|
|
|
56
65
|
Если id неизвестен — контекстный поиск `GET /api/library/context-search?q=...`, затем
|
|
57
66
|
метаданные по найденным id: `GET /api/library/by-ids?ids=...` (curl и поля поиска — в том же файле).
|
|
58
67
|
|
|
59
|
-
Portal JSON из `/details` не является форматом `exportSession
|
|
60
|
-
`
|
|
61
|
-
и перенеси `items[]` через `addOrUpdateConstituenta`, сохраняя raw-поля:
|
|
62
|
-
`cst_type → cstType`, `definition_formal → definitionFormal`,
|
|
63
|
-
`term_raw → term`, `definition_raw → definitionText`, `convention → convention`.
|
|
64
|
-
После переноса запусти `listDiagnostics`; для результата в Portal используй
|
|
65
|
-
`exportPortalSchema`, а для локального снапшота — `exportSession`.
|
|
68
|
+
Portal JSON из `/details` не является форматом `exportSession`. Используй `importData(payload)` —
|
|
69
|
+
auto определит `portal-details` или `portal-schema`. Явный kind: `'portal-details'`, `'portal-schema'`, `'session'`.
|
|
66
70
|
|
|
67
71
|
### Концептуализация (КС из содержания источника)
|
|
68
72
|
|
|
@@ -75,7 +79,7 @@ Portal JSON из `/details` не является форматом `exportSessio
|
|
|
75
79
|
5. Добавь `A#` на структуры: `card`, покрытие `Pr1,2(S#)=…`, принадлежность выбора.
|
|
76
80
|
6. Введи `F#` для типовых запросов.
|
|
77
81
|
7. Производные понятия строй через `Pr*`, `Fi*`, `F#` от центрального `D#` и базовых `S#`.
|
|
78
|
-
8. Перед каждым
|
|
82
|
+
8. Перед каждым patch — `analyzeExpression`; при ошибках — [цикл диагностик](#цикл-диагностик).
|
|
79
83
|
9. Сомнительную семантику проверь на маленькой КМ ([цикл КМ](#проверка-на-маленькой-км), [MODEL-TESTING.md](../../docs/MODEL-TESTING.md)).
|
|
80
84
|
10. Перед показом результата пройди [чеклист ревью КС](#ревью-концептуальной-схемы).
|
|
81
85
|
|
|
@@ -90,7 +94,7 @@ Portal JSON из `/details` не является форматом `exportSessio
|
|
|
90
94
|
3. Сопоставь `code` с исправлением в [DIAGNOSTICS.md](../../docs/DIAGNOSTICS.md).
|
|
91
95
|
4. Исправь именно диапазон в `definitionFormal`.
|
|
92
96
|
5. Не повторяй вызов без изменения ввода.
|
|
93
|
-
6. После успеха — `
|
|
97
|
+
6. После успеха — ещё один `applySchemaPatch` с исправленным элементом.
|
|
94
98
|
|
|
95
99
|
### Проверка на маленькой КМ
|
|
96
100
|
|
|
@@ -98,9 +102,9 @@ Portal JSON из `/details` не является форматом `exportSessio
|
|
|
98
102
|
|
|
99
103
|
1. Отдельная `createSession` или изолированная копия текущей сессии.
|
|
100
104
|
2. Только нужные поставщики: `X#`, `C#`, `S#` и проверяемые `D#` / `F#` / `P#` / `A#`.
|
|
101
|
-
3. `analyzeExpression` и `
|
|
102
|
-
4.
|
|
103
|
-
5. `
|
|
105
|
+
3. `analyzeExpression` и `applySchemaPatch`.
|
|
106
|
+
4. Значения: `setModelValues`.
|
|
107
|
+
5. `evaluate`; сравни с ожидаемым `value`.
|
|
104
108
|
6. При нескольких зависимых определениях — `recalculateModel`.
|
|
105
109
|
|
|
106
110
|
Для регрессий вынеси проверку в скрипт или colocated `*.test.ts` (см. [MODEL-TESTING.md](../../docs/MODEL-TESTING.md)).
|
|
@@ -114,13 +118,24 @@ Portal JSON из `/details` не является форматом `exportSessio
|
|
|
114
118
|
|
|
115
119
|
Правила валидации по типам — [CONSTITUENTA.md](../../docs/CONSTITUENTA.md).
|
|
116
120
|
|
|
121
|
+
## Формат ответа агента
|
|
122
|
+
|
|
123
|
+
В конце работы сообщи:
|
|
124
|
+
|
|
125
|
+
- что изменено в схеме или модели;
|
|
126
|
+
- есть ли активные диагностики;
|
|
127
|
+
- какой экспорт получен: session / Portal schema / Portal model;
|
|
128
|
+
- какие проверки выполнены: analyze / evaluate / recalculate / tests.
|
|
129
|
+
|
|
130
|
+
Не вставляй большой JSON в чат без запроса пользователя.
|
|
131
|
+
|
|
117
132
|
## Чеклисты
|
|
118
133
|
|
|
119
134
|
### Сессия и rstool
|
|
120
135
|
|
|
121
|
-
- [ ]
|
|
122
|
-
- [ ] `cstType`
|
|
123
|
-
- [ ]
|
|
136
|
+
- [ ] Используется текущая сессия (`getSessionState`) или явный `sessionId`, если сессий несколько.
|
|
137
|
+
- [ ] Для стандартных alias `X/C/S/D/A/F/P` можно доверить `cstType` `applySchemaPatch`; нестандартные alias передаются с явным `cstType`.
|
|
138
|
+
- [ ] Для пачки конституент предпочитай один `applySchemaPatch` с массивом `items`.
|
|
124
139
|
|
|
125
140
|
### Перед показом, commit и export
|
|
126
141
|
|
|
@@ -3,199 +3,62 @@
|
|
|
3
3
|
## Контракт rstool
|
|
4
4
|
|
|
5
5
|
- Пакет: `@rsconcept/rstool`
|
|
6
|
-
- Версия контракта: `
|
|
6
|
+
- Версия контракта: `2.0.0` (`CONTRACT_VERSION`)
|
|
7
7
|
- Основной класс: `RSToolAgent`
|
|
8
8
|
- Публичные импорты: `@rsconcept/rstool` и `@rsconcept/rstool/wrapper`
|
|
9
9
|
|
|
10
|
-
### Методы
|
|
11
|
-
|
|
12
|
-
| Метод
|
|
13
|
-
|
|
|
14
|
-
| `
|
|
15
|
-
| `
|
|
16
|
-
| `
|
|
17
|
-
| `
|
|
18
|
-
| `
|
|
19
|
-
| `
|
|
20
|
-
| `
|
|
21
|
-
| `
|
|
22
|
-
| `
|
|
23
|
-
| `
|
|
24
|
-
| `
|
|
25
|
-
| `
|
|
26
|
-
| `
|
|
27
|
-
| `getModelState(sessionId)`
|
|
28
|
-
| `
|
|
29
|
-
| `
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
### `ConstituentaDraft`
|
|
33
|
-
|
|
34
|
-
```ts
|
|
35
|
-
{
|
|
36
|
-
id: number; // стабильный id внутри сессии
|
|
37
|
-
alias: string;
|
|
38
|
-
cstType: CstType;
|
|
39
|
-
definitionFormal: string;
|
|
40
|
-
term?: string;
|
|
41
|
-
definitionText?: string;
|
|
42
|
-
convention?: string;
|
|
43
|
-
}
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
Пропущенные текстовые поля в сохранённом состоянии по умолчанию `''`.
|
|
47
|
-
|
|
48
|
-
### Метаданные `SessionState`
|
|
49
|
-
|
|
50
|
-
Задаются в `createSession(initial?)` или через `importSession`:
|
|
51
|
-
|
|
52
|
-
```ts
|
|
53
|
-
{
|
|
54
|
-
alias: string; // alias объекта библиотеки
|
|
55
|
-
title: string; // отображаемое название
|
|
56
|
-
comment: string; // заметки разработчика
|
|
57
|
-
}
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
При опускании все поля по умолчанию `''`.
|
|
61
|
-
|
|
62
|
-
### Типы модели и вычисления
|
|
10
|
+
### Методы library API
|
|
11
|
+
|
|
12
|
+
| Метод | Назначение |
|
|
13
|
+
| ---------------------------------------------- | -------------------------------------------- |
|
|
14
|
+
| `ensureSession(initial?)` | Вернуть текущую сессию или создать новую |
|
|
15
|
+
| `createSession(initial?)` | Новая in-memory сессия |
|
|
16
|
+
| `getCurrentSession()` | Текущая активная сессия или `null` |
|
|
17
|
+
| `setCurrentSession(sessionId)` | Сделать сессию текущей |
|
|
18
|
+
| `applySchemaPatch(input, sessionId?)` | Единственный путь правки схемы |
|
|
19
|
+
| `getSessionState(detail?, sessionId?)` | `summary` (default) или `full` |
|
|
20
|
+
| `listDiagnostics(filters?, sessionId?)` | Активные диагностики |
|
|
21
|
+
| `analyzeExpression(input, sessionId?)` | Разбор без сохранения (`recordDiagnostics?`) |
|
|
22
|
+
| `commitStep(message?, sessionId?)` | Ревизия |
|
|
23
|
+
| `exportSession(sessionId?)` | JSON сессии |
|
|
24
|
+
| `exportPortal({ kind, format? }, sessionId?)` | Portal Load from JSON |
|
|
25
|
+
| `importData(payload, kind?)` | Импорт сессии / Portal |
|
|
26
|
+
| `setModelValues({ set?, clear? }, sessionId?)` | Значения модели |
|
|
27
|
+
| `getModelState(sessionId?)` | Состояние интерпретации |
|
|
28
|
+
| `evaluate(input, sessionId?)` | Scratch или конституента |
|
|
29
|
+
| `recalculateModel(sessionId?)` | Пересчёт |
|
|
30
|
+
|
|
31
|
+
### `applySchemaPatch`
|
|
63
32
|
|
|
64
33
|
```ts
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
interface EvaluationResult {
|
|
73
|
-
success: boolean;
|
|
74
|
-
value: RSToolValue | BasicBinding | null;
|
|
75
|
-
status: EvalStatus; // 1=NO_EVAL … 7=HAS_DATA
|
|
76
|
-
iterations: number;
|
|
77
|
-
cacheHits: number;
|
|
78
|
-
diagnostics: { code: number; from: number; to: number; params?: string[] }[];
|
|
79
|
-
}
|
|
34
|
+
tool.applySchemaPatch({
|
|
35
|
+
initial: { title: 'Kinship' },
|
|
36
|
+
commitMessage: 'initial schema',
|
|
37
|
+
items: [{ alias: 'X1' }, { alias: 'S1', definitionFormal: 'ℬ(X1×X1)' }, { alias: 'D1', definitionFormal: 'Pr1(S1)' }]
|
|
38
|
+
});
|
|
80
39
|
```
|
|
81
40
|
|
|
82
|
-
Привязки `basic`/`constant` используют `type: "basic"` и `value: { "0": "label", … }`. Структурные значения — нормализованная типизация в `type` и вложенные массивы для множеств/кортежей.
|
|
83
|
-
|
|
84
41
|
### Протокол stdio
|
|
85
42
|
|
|
86
|
-
|
|
87
|
-
|
|
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":"..."}}`
|
|
43
|
+
Плоские `params` (без `input`). Опционально: переменная окружения `RSTOOL_PERSISTENCE_DIR` — каталог для сохранения сессий между перезапусками обёртки (в library API — `new RSToolAgent({ persistenceDir })`).
|
|
91
44
|
|
|
92
|
-
|
|
45
|
+
Служебные методы:
|
|
93
46
|
|
|
94
|
-
|
|
47
|
+
- `ping` — liveness и `contractVersion`.
|
|
48
|
+
- `methods` — список доступных stdio-методов.
|
|
95
49
|
|
|
96
50
|
```json
|
|
97
|
-
{"id":"
|
|
98
|
-
{"id":"
|
|
99
|
-
{"id":"
|
|
100
|
-
{"id":"
|
|
101
|
-
{"id":"
|
|
102
|
-
{"id":"5","method":"commitStep","params":{"sessionId":"…","message":"checkpoint"}}
|
|
103
|
-
{"id":"6","method":"exportSession","params":{"sessionId":"…"}}
|
|
104
|
-
{"id":"6a","method":"exportPortalSchema","params":{"sessionId":"…"}}
|
|
105
|
-
{"id":"6b","method":"exportPortalModel","params":{"sessionId":"…"}}
|
|
106
|
-
{"id":"7","method":"setConstituentaValue","params":{"sessionId":"…","input":{"target":1,"value":{"0":"a","1":"b"}}}}
|
|
107
|
-
{"id":"8","method":"evaluateExpression","params":{"sessionId":"…","input":{"expression":"1+2","cstType":"term"}}}
|
|
108
|
-
{"id":"9","method":"evaluateConstituenta","params":{"sessionId":"…","input":{"constituentId":3}}}
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
`RSToolWrapperClient`: по умолчанию запускает `rstool-wrapper`; методы `waitUntilReady()`, `call(method, params)`, `close()`.
|
|
112
|
-
|
|
113
|
-
### Результат анализа
|
|
114
|
-
|
|
115
|
-
```ts
|
|
116
|
-
interface AnalysisResult {
|
|
117
|
-
success: boolean;
|
|
118
|
-
type: Record<string, unknown> | null;
|
|
119
|
-
valueClass: 'value' | 'property' | null;
|
|
120
|
-
diagnostics: { code: number; from: number; to: number; params?: string[] }[];
|
|
121
|
-
}
|
|
51
|
+
{"id":"2","method":"applySchemaPatch","params":{"items":[{"alias":"X1"}]}}
|
|
52
|
+
{"id":"7","method":"setModelValues","params":{"set":[{"target":1,"value":{"0":"a"}}]}}
|
|
53
|
+
{"id":"8","method":"evaluate","params":{"constituentId":3}}
|
|
54
|
+
{"id":"9","method":"exportPortal","params":{"kind":"schema"}}
|
|
55
|
+
{"id":"10","method":"importData","params":{"payload":"..."}}
|
|
122
56
|
```
|
|
123
57
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
Кратко: язык на базе логики первого порядка; разделение множественных и логических выражений; параметризованные шаблоны для функций и предикатов.
|
|
127
|
-
|
|
128
|
-
- **Типизация**: структурный тип выражения; ступени включают элементы (`Xi`, `Ci`), `Z`, кортежи `(H1×…×Hn)`, множества `ℬ(H)`, логику `Logic`, параметризованные `Hr 🠔 [H1,…,Hi]`. У `structure` (`S#`) поле `definitionFormal` **задаёт** типизацию. У `term` (`D#`) типизация **выводится** из определения.
|
|
129
|
-
|
|
130
|
-
## Токены грамматики
|
|
58
|
+
### MCP tools
|
|
131
59
|
|
|
132
|
-
|
|
133
|
-
|
|
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
|
-
|
|
145
|
-
Полная грамматика и приоритеты: `docs/GRAMMAR-REF.md`.
|
|
60
|
+
17 tools — см. `rstool-mcp/README.md`.
|
|
146
61
|
|
|
147
62
|
## Документация
|
|
148
63
|
|
|
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` |
|
|
165
|
-
|
|
166
|
-
Воркфлоу и чеклисты — `skills/rstool-helper/GUIDE.md`.
|
|
167
|
-
|
|
168
|
-
## Коды ошибок
|
|
169
|
-
|
|
170
|
-
Категории и исправления по коду: `docs/DIAGNOSTICS.md`.
|
|
171
|
-
|
|
172
|
-
Категории:
|
|
173
|
-
|
|
174
|
-
- `0x84xx` — синтаксис / разбор
|
|
175
|
-
- `0x28xx` — предупреждения локальных объявлений
|
|
176
|
-
- `0x88xx` — семантика / типы
|
|
177
|
-
- `0x886x` — уровень конституент (пустая производная, запрещённое определение)
|
|
178
|
-
- `0x81xx` — вычисление (runtime; из `evaluateExpression` / `evaluateConstituenta`)
|
|
179
|
-
|
|
180
|
-
## Форма экспорта сессии
|
|
181
|
-
|
|
182
|
-
`exportSession(sessionId)` возвращает JSON-строку `{ contractVersion, state, diagnostics }`.
|
|
183
|
-
|
|
184
|
-
- `state.alias`, `state.title`, `state.comment` — метаданные объекта библиотеки для экспорта в Portal (`comment` → JSON `description`).
|
|
185
|
-
- `state.items[]` — каждая конституента с `id`, `alias`, `cstType`, `definitionFormal`, опциональными текстовыми полями и вложенным результатом анализа.
|
|
186
|
-
- `state.model.items[]` — присутствует, если заданы значения интерпретации.
|
|
187
|
-
- `diagnostics[]` — накопленные диагностики со смещениями и кодами.
|
|
188
|
-
|
|
189
|
-
`importSession(payload)` принимает только этот формат `exportSession`. JSON Portal из
|
|
190
|
-
`GET /api/rsforms/:id/details` сначала переноси в сессию через `createSession` и
|
|
191
|
-
`addOrUpdateConstituenta`; поля и REST-пути описаны в `docs/PORTAL-API.md`.
|
|
192
|
-
|
|
193
|
-
## JSON импорта Portal
|
|
194
|
-
|
|
195
|
-
Для **Load from JSON** на существующей схеме или модели Portal:
|
|
196
|
-
|
|
197
|
-
- `exportPortalSchema(sessionId)` — файл схемы
|
|
198
|
-
- `exportPortalModel(sessionId)` — файл модели
|
|
199
|
-
|
|
200
|
-
- Схема `items[]`: поля конституент (`cst_type`, `definition_formal`, `term_raw`, …).
|
|
201
|
-
- Модель `items[]`: `{ id, type, value }` на каждую привязку.
|
|
64
|
+
Воркфлоу: `GUIDE.md`. Примеры: `EXAMPLES.md`. Язык: `docs/*.md`.
|