@slexkit/mcp 0.3.2 → 0.4.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.
@@ -0,0 +1,248 @@
1
+ {
2
+ "name": "slex-conformance",
3
+ "packageName": "slexkit",
4
+ "version": "0.4.0",
5
+ "schemaVersion": "2026-06",
6
+ "protocolVersion": "0.1",
7
+ "logicProfileVersion": "0.1",
8
+ "fixtures": [
9
+ {
10
+ "id": "valid-full-envelope",
11
+ "kind": "valid",
12
+ "mode": "trusted",
13
+ "source": "{ slex: \"0.1\", namespace: \"valid_full\", g: { count: 0 }, layout: { \"button:add\": { label: \"Add\", onclick: \"g.count++\" }, \"text:value\": { \"$text\": \"String(g.count)\" } } }",
14
+ "expected": {
15
+ "ok": true,
16
+ "warnings": []
17
+ }
18
+ },
19
+ {
20
+ "id": "valid-dynamic-props",
21
+ "kind": "valid",
22
+ "mode": "trusted",
23
+ "source": "{ slex: \"0.1\", namespace: \"dynamic_props\", g: { name: \"Slex\" }, layout: { \"text:greeting\": { \"$text\": \"'Hello, ' + g.name\" } } }",
24
+ "expected": {
25
+ "ok": true,
26
+ "warnings": []
27
+ }
28
+ },
29
+ {
30
+ "id": "valid-event-handler",
31
+ "kind": "valid",
32
+ "mode": "trusted",
33
+ "source": "{ slex: \"0.1\", namespace: \"event_handler\", g: { count: 0 }, layout: { \"button:add\": { label: \"Add\", onclick: \"g.count = g.count + Number($event || 1)\" } } }",
34
+ "expected": {
35
+ "ok": true,
36
+ "warnings": []
37
+ }
38
+ },
39
+ {
40
+ "id": "valid-loop-condition",
41
+ "kind": "valid",
42
+ "mode": "trusted",
43
+ "source": "{ slex: \"0.1\", namespace: \"loop_condition\", g: { visible: true, items: [{ id: \"a\", label: \"A\" }] }, layout: { \"column:list\": { \"$if\": \"g.visible\", \"text:item\": { \"$for\": \"g.items\", \"$key\": \"$item.id\", \"$text\": \"$item.label\" } } } }",
44
+ "expected": {
45
+ "ok": true,
46
+ "warnings": []
47
+ }
48
+ },
49
+ {
50
+ "id": "valid-stdlib",
51
+ "kind": "valid",
52
+ "mode": "trusted",
53
+ "source": "{ slex: \"0.1\", namespace: \"stdlib\", g: { done: 3, total: 4 }, layout: { \"stat:progress\": { label: \"Progress\", \"$value\": \"std.format.percent(std.math.safeDivide(g.done, g.total), 1)\" } } }",
54
+ "expected": {
55
+ "ok": true,
56
+ "warnings": []
57
+ }
58
+ },
59
+ {
60
+ "id": "valid-secure-api",
61
+ "kind": "valid",
62
+ "mode": "secure",
63
+ "source": "{ slex: \"0.1\", namespace: \"secure_api\", g: { status: \"idle\", async load() { const result = await api.fetch(\"/status\"); this.status = String(result.status); } }, layout: { \"button:load\": { label: \"Load\", onclick: \"g.load()\" }, \"text:status\": { \"$text\": \"g.status\" } } }",
64
+ "expected": {
65
+ "ok": true,
66
+ "warnings": []
67
+ }
68
+ },
69
+ {
70
+ "id": "valid-bare-tree",
71
+ "kind": "valid",
72
+ "mode": "trusted",
73
+ "source": "{ \"text:message\": { text: \"Bare tree\" } }",
74
+ "expected": {
75
+ "ok": true,
76
+ "warnings": []
77
+ }
78
+ },
79
+ {
80
+ "id": "valid-state-only",
81
+ "kind": "valid",
82
+ "mode": "trusted",
83
+ "source": "{ slex: \"0.1\", namespace: \"state_only\", g: { ready: true } }",
84
+ "expected": {
85
+ "ok": true,
86
+ "warnings": []
87
+ }
88
+ },
89
+ {
90
+ "id": "warning-secure-native-capability",
91
+ "kind": "warning",
92
+ "mode": "secure",
93
+ "source": "{ slex: \"0.1\", namespace: \"native_fetch\", g: { load() { fetch(\"/x\"); } }, layout: { \"button:load\": { label: \"Load\", onclick: \"g.load()\" } } }",
94
+ "expected": {
95
+ "ok": true,
96
+ "warnings": [
97
+ {
98
+ "code": "native_secure_capability",
99
+ "path": "g.load",
100
+ "value": "fetch"
101
+ }
102
+ ]
103
+ }
104
+ },
105
+ {
106
+ "id": "warning-secure-native-timer-websocket",
107
+ "kind": "warning",
108
+ "mode": "secure",
109
+ "source": "{ slex: \"0.1\", namespace: \"native_timer_socket\", g: { start() { setTimeout(() => {}, 10); const socket = new WebSocket(\"wss://example.com\"); return socket; } }, layout: { \"button:start\": { label: \"Start\", onclick: \"g.start()\" } } }",
110
+ "expected": {
111
+ "ok": true,
112
+ "warnings": [
113
+ {
114
+ "code": "native_secure_capability",
115
+ "path": "g.start",
116
+ "value": "WebSocket"
117
+ },
118
+ {
119
+ "code": "native_secure_capability",
120
+ "path": "g.start",
121
+ "value": "setTimeout"
122
+ }
123
+ ]
124
+ }
125
+ },
126
+ {
127
+ "id": "warning-unknown-component-prop",
128
+ "kind": "warning",
129
+ "mode": "trusted",
130
+ "source": "{ namespace: \"unknowns\", layout: { \"madeup:thing\": { madeUp: true }, \"text:body\": { madeUp: true } } }",
131
+ "expected": {
132
+ "ok": true,
133
+ "warnings": [
134
+ {
135
+ "code": "unknown_component",
136
+ "path": "layout.madeup:thing",
137
+ "value": "madeup"
138
+ },
139
+ {
140
+ "code": "unknown_prop",
141
+ "path": "layout.text:body.madeUp",
142
+ "value": "madeUp"
143
+ }
144
+ ]
145
+ }
146
+ },
147
+ {
148
+ "id": "warning-invalid-component-key",
149
+ "kind": "warning",
150
+ "mode": "trusted",
151
+ "source": "{ namespace: \"bad_key\", layout: { \"Text Bad:item\": { text: \"bad\" } } }",
152
+ "expected": {
153
+ "ok": true,
154
+ "warnings": [
155
+ {
156
+ "code": "invalid_component_key",
157
+ "path": "layout.Text Bad:item",
158
+ "value": "Text Bad:item"
159
+ }
160
+ ]
161
+ }
162
+ },
163
+ {
164
+ "id": "warning-invalid-directive-type",
165
+ "kind": "warning",
166
+ "mode": "trusted",
167
+ "source": "{ namespace: \"bad_directive\", layout: { \"text:message\": { \"$if\": true, text: \"bad\" } } }",
168
+ "expected": {
169
+ "ok": true,
170
+ "warnings": [
171
+ {
172
+ "code": "invalid_directive_type",
173
+ "path": "layout.text:message.$if",
174
+ "value": "$if"
175
+ }
176
+ ]
177
+ }
178
+ },
179
+ {
180
+ "id": "warning-unsupported-protocol",
181
+ "kind": "warning",
182
+ "mode": "trusted",
183
+ "source": "{ slex: \"9.9\", namespace: \"future\", layout: { \"text:message\": { text: \"future\" } } }",
184
+ "expected": {
185
+ "ok": true,
186
+ "warnings": [
187
+ {
188
+ "code": "unsupported_protocol",
189
+ "path": "slex",
190
+ "value": "9.9"
191
+ }
192
+ ]
193
+ }
194
+ },
195
+ {
196
+ "id": "warning-reserved-context-shadowing",
197
+ "kind": "warning",
198
+ "mode": "trusted",
199
+ "source": "{ namespace: \"shadow\", g: { std: \"bad\" }, layout: { \"text:api\": { text: \"shadow\" } } }",
200
+ "expected": {
201
+ "ok": true,
202
+ "warnings": [
203
+ {
204
+ "code": "reserved_context_shadowing",
205
+ "path": "g.std",
206
+ "value": "std"
207
+ },
208
+ {
209
+ "code": "reserved_context_shadowing",
210
+ "path": "layout.text:api",
211
+ "value": "api"
212
+ }
213
+ ]
214
+ }
215
+ },
216
+ {
217
+ "id": "warning-unknown-std-api",
218
+ "kind": "warning",
219
+ "mode": "secure",
220
+ "source": "{ slex: \"0.1\", namespace: \"unknown_logic\", g: { load() { api.socket(); } }, layout: { \"text:value\": { \"$text\": \"std.math.nope(1)\" } } }",
221
+ "expected": {
222
+ "ok": true,
223
+ "warnings": [
224
+ {
225
+ "code": "unknown_api_member",
226
+ "path": "g.load",
227
+ "value": "api.socket"
228
+ },
229
+ {
230
+ "code": "unknown_std_member",
231
+ "path": "layout.text:value.$text",
232
+ "value": "std.math.nope"
233
+ }
234
+ ]
235
+ }
236
+ },
237
+ {
238
+ "id": "invalid-syntax",
239
+ "kind": "invalid",
240
+ "mode": "trusted",
241
+ "source": "{ namespace: \"broken\", layout: { \"text:message\": { text: \"missing close\" }",
242
+ "expected": {
243
+ "ok": false,
244
+ "diagnostic": "syntax"
245
+ }
246
+ }
247
+ ]
248
+ }