@rsconcept/rstool 0.10.3 → 1.0.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 +41 -31
- package/dist/agent-workflow-D-PSIb-m.d.ts +70 -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 -1
- 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/rstool-agent-_8bplZnb.d.ts +71 -0
- package/dist/rstool-agent-kijHA9ML.js +476 -0
- package/dist/rstool-agent-kijHA9ML.js.map +1 -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/session-store-C3jyOSqI.js +142 -0
- package/dist/session-store-C3jyOSqI.js.map +1 -0
- package/dist/tool-contract-5_Q44DGE.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 +62 -52
- 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 +23 -18
- 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 +13 -15
- 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 +19 -50
- package/examples/sample/build-rsmodel.ts +25 -44
- package/examples/sample/rsform-session.json +36 -33
- 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 +2 -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 +43 -0
- package/src/mappers/types.ts +4 -0
- package/src/models/agent-workflow.ts +78 -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.ts +39 -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.ts +44 -0
- package/src/models/rstool-agent.test.ts +300 -147
- package/src/models/rstool-agent.ts +350 -93
- package/src/models/session.ts +8 -5
- package/src/models/tool-contract.ts +81 -42
- package/src/session/batch-apply.test.ts +28 -0
- package/src/session/batch-apply.ts +47 -0
- package/src/session/persistence.ts +56 -0
- package/src/session/session-store.ts +67 -4
- package/src/wrapper/client.ts +23 -0
- package/src/wrapper/stdio-wrapper.ts +59 -49
- 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,43 +1,26 @@
|
|
|
1
1
|
{
|
|
2
|
-
"contractVersion": "
|
|
2
|
+
"contractVersion": "2.0.0",
|
|
3
3
|
"state": {
|
|
4
|
-
"sessionId": "
|
|
4
|
+
"sessionId": "b72f75c0-4f17-4bef-9ff3-913ea16191db",
|
|
5
5
|
"alias": "",
|
|
6
6
|
"title": "",
|
|
7
7
|
"comment": "",
|
|
8
|
-
"createdAt": "2026-
|
|
9
|
-
"updatedAt": "2026-
|
|
8
|
+
"createdAt": "2026-07-01T17:12:54.696Z",
|
|
9
|
+
"updatedAt": "2026-07-01T17:12:54.714Z",
|
|
10
10
|
"revisions": [
|
|
11
11
|
{
|
|
12
|
-
"revisionId": "
|
|
13
|
-
"at": "2026-
|
|
12
|
+
"revisionId": "e85ad551-0aa0-42d9-b55d-01719aed6533",
|
|
13
|
+
"at": "2026-07-01T17:12:54.714Z",
|
|
14
14
|
"message": "Применение шаблонов БВ: сотрудники, проекты, F6/F9/F20/P5"
|
|
15
15
|
}
|
|
16
16
|
],
|
|
17
17
|
"items": [
|
|
18
18
|
{
|
|
19
|
-
"id":
|
|
20
|
-
"alias": "
|
|
21
|
-
"cstType": "statement",
|
|
22
|
-
"definitionFormal": "1=1",
|
|
23
|
-
"term": "Применение шаблонов банка выражений",
|
|
24
|
-
"convention": "Подстановка радикалов БВ: R1→X1, R2→X2. Отношение σ→S1 или S2. Примеры: БВ F6→F_IMAGE, БВ F20→F_SOURCES, БВ P5→P_FUNCTION",
|
|
25
|
-
"definitionText": "",
|
|
26
|
-
"analysis": {
|
|
27
|
-
"success": true,
|
|
28
|
-
"type": {
|
|
29
|
-
"typeID": 6
|
|
30
|
-
},
|
|
31
|
-
"valueClass": "value",
|
|
32
|
-
"diagnostics": []
|
|
33
|
-
}
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
"id": 2,
|
|
37
|
-
"alias": "X1",
|
|
19
|
+
"id": 3,
|
|
20
|
+
"alias": "X2",
|
|
38
21
|
"cstType": "basic",
|
|
39
22
|
"definitionFormal": "",
|
|
40
|
-
"term": "
|
|
23
|
+
"term": "проекты",
|
|
41
24
|
"definitionText": "",
|
|
42
25
|
"convention": "",
|
|
43
26
|
"analysis": {
|
|
@@ -46,7 +29,7 @@
|
|
|
46
29
|
"typeID": 5,
|
|
47
30
|
"base": {
|
|
48
31
|
"typeID": 3,
|
|
49
|
-
"baseID": "
|
|
32
|
+
"baseID": "X2"
|
|
50
33
|
}
|
|
51
34
|
},
|
|
52
35
|
"valueClass": "value",
|
|
@@ -54,11 +37,11 @@
|
|
|
54
37
|
}
|
|
55
38
|
},
|
|
56
39
|
{
|
|
57
|
-
"id":
|
|
58
|
-
"alias": "
|
|
40
|
+
"id": 2,
|
|
41
|
+
"alias": "X1",
|
|
59
42
|
"cstType": "basic",
|
|
60
43
|
"definitionFormal": "",
|
|
61
|
-
"term": "
|
|
44
|
+
"term": "сотрудники",
|
|
62
45
|
"definitionText": "",
|
|
63
46
|
"convention": "",
|
|
64
47
|
"analysis": {
|
|
@@ -67,7 +50,7 @@
|
|
|
67
50
|
"typeID": 5,
|
|
68
51
|
"base": {
|
|
69
52
|
"typeID": 3,
|
|
70
|
-
"baseID": "
|
|
53
|
+
"baseID": "X1"
|
|
71
54
|
}
|
|
72
55
|
},
|
|
73
56
|
"valueClass": "value",
|
|
@@ -80,8 +63,8 @@
|
|
|
80
63
|
"cstType": "structure",
|
|
81
64
|
"definitionFormal": "ℬ(X1×X2)",
|
|
82
65
|
"term": "назначение на проект",
|
|
83
|
-
"convention": "σ в шаблонах БВ для бинарных отношений двух множеств",
|
|
84
66
|
"definitionText": "",
|
|
67
|
+
"convention": "σ в шаблонах БВ для бинарных отношений двух множеств",
|
|
85
68
|
"analysis": {
|
|
86
69
|
"success": true,
|
|
87
70
|
"type": {
|
|
@@ -110,8 +93,8 @@
|
|
|
110
93
|
"cstType": "structure",
|
|
111
94
|
"definitionFormal": "ℬ(X1×X1)",
|
|
112
95
|
"term": "подчинённость",
|
|
113
|
-
"convention": "σ в шаблонах БВ для бинарных отношений на одном множестве",
|
|
114
96
|
"definitionText": "",
|
|
97
|
+
"convention": "σ в шаблонах БВ для бинарных отношений на одном множестве",
|
|
115
98
|
"analysis": {
|
|
116
99
|
"success": true,
|
|
117
100
|
"type": {
|
|
@@ -134,14 +117,35 @@
|
|
|
134
117
|
"diagnostics": []
|
|
135
118
|
}
|
|
136
119
|
},
|
|
120
|
+
{
|
|
121
|
+
"id": 10,
|
|
122
|
+
"alias": "D2",
|
|
123
|
+
"cstType": "term",
|
|
124
|
+
"definitionFormal": "Pr1(S2) \\ Pr2(S2)",
|
|
125
|
+
"term": "глава иерархии",
|
|
126
|
+
"definitionText": "",
|
|
127
|
+
"convention": "БВ F20: применение к S2 (развёрнуто в D2, т.к. вызов F# в терме не анализируется)",
|
|
128
|
+
"analysis": {
|
|
129
|
+
"success": true,
|
|
130
|
+
"type": {
|
|
131
|
+
"typeID": 5,
|
|
132
|
+
"base": {
|
|
133
|
+
"typeID": 3,
|
|
134
|
+
"baseID": "X1"
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
"valueClass": "value",
|
|
138
|
+
"diagnostics": []
|
|
139
|
+
}
|
|
140
|
+
},
|
|
137
141
|
{
|
|
138
142
|
"id": 6,
|
|
139
143
|
"alias": "F_IMAGE",
|
|
140
144
|
"cstType": "function",
|
|
141
145
|
"definitionFormal": "[α∈X1, σ∈ℬ(X1×X2)] Pr2(Fi1[{α}](σ))",
|
|
142
146
|
"term": "проекты сотрудника",
|
|
143
|
-
"convention": "БВ F6: R1→X1, R2→X2",
|
|
144
147
|
"definitionText": "",
|
|
148
|
+
"convention": "БВ F6: R1→X1, R2→X2",
|
|
145
149
|
"analysis": {
|
|
146
150
|
"success": true,
|
|
147
151
|
"type": {
|
|
@@ -192,8 +196,8 @@
|
|
|
192
196
|
"cstType": "function",
|
|
193
197
|
"definitionFormal": "[σ∈ℬ(X1×X1)] Pr1(σ) \\ Pr2(σ)",
|
|
194
198
|
"term": "вершины без предшественников",
|
|
195
|
-
"convention": "БВ F20 (истоки графа подчинённости)",
|
|
196
199
|
"definitionText": "",
|
|
200
|
+
"convention": "БВ F20 (истоки графа подчинённости)",
|
|
197
201
|
"analysis": {
|
|
198
202
|
"success": true,
|
|
199
203
|
"type": {
|
|
@@ -237,8 +241,8 @@
|
|
|
237
241
|
"cstType": "predicate",
|
|
238
242
|
"definitionFormal": "[α∈ℬ(X1), σ∈ℬ(X1×X2)] card(Pr1(σ)) = card(σ) & Pr1(σ) = α",
|
|
239
243
|
"term": "тотальная функция X1→X2",
|
|
240
|
-
"convention": "БВ P5",
|
|
241
244
|
"definitionText": "",
|
|
245
|
+
"convention": "БВ P5",
|
|
242
246
|
"analysis": {
|
|
243
247
|
"success": true,
|
|
244
248
|
"type": {
|
|
@@ -288,8 +292,8 @@
|
|
|
288
292
|
"cstType": "term",
|
|
289
293
|
"definitionFormal": "Pr2(Fi1[X1](S1))",
|
|
290
294
|
"term": "все назначенные проекты",
|
|
291
|
-
"convention": "БВ F9: образ множества X1 по S1",
|
|
292
295
|
"definitionText": "",
|
|
296
|
+
"convention": "БВ F9: образ множества X1 по S1",
|
|
293
297
|
"analysis": {
|
|
294
298
|
"success": true,
|
|
295
299
|
"type": {
|
|
@@ -304,21 +308,17 @@
|
|
|
304
308
|
}
|
|
305
309
|
},
|
|
306
310
|
{
|
|
307
|
-
"id":
|
|
308
|
-
"alias": "
|
|
309
|
-
"cstType": "
|
|
310
|
-
"definitionFormal": "
|
|
311
|
-
"term": "
|
|
312
|
-
"convention": "БВ F20: применение к S2 (развёрнуто в D2, т.к. вызов F# в терме не анализируется)",
|
|
311
|
+
"id": 1,
|
|
312
|
+
"alias": "T1",
|
|
313
|
+
"cstType": "statement",
|
|
314
|
+
"definitionFormal": "1=1",
|
|
315
|
+
"term": "Применение шаблонов банка выражений",
|
|
313
316
|
"definitionText": "",
|
|
317
|
+
"convention": "Подстановка радикалов БВ: R1→X1, R2→X2. Отношение σ→S1 или S2. Примеры: БВ F6→F_IMAGE, БВ F20→F_SOURCES, БВ P5→P_FUNCTION",
|
|
314
318
|
"analysis": {
|
|
315
319
|
"success": true,
|
|
316
320
|
"type": {
|
|
317
|
-
"typeID":
|
|
318
|
-
"base": {
|
|
319
|
-
"typeID": 3,
|
|
320
|
-
"baseID": "X1"
|
|
321
|
-
}
|
|
321
|
+
"typeID": 6
|
|
322
322
|
},
|
|
323
323
|
"valueClass": "value",
|
|
324
324
|
"diagnostics": []
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rsconcept/rstool",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Agent-facing library for incremental RSForm construction, RSLang analysis, diagnostics, modeling, and evaluation. Wraps @rsconcept/domain with a deterministic session contract
|
|
3
|
+
"version": "1.0.0",
|
|
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",
|
|
7
7
|
"repository": {
|
|
@@ -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
|
|