New born
setoelkahfi committed
Aug 15, 2026 at 10:16 UTC
72c5ce314ce9bc3000f1ee615944d921ac2cf468
12 files changed
+1320
-283
.gitignore
+2
-1
@@ -1,3 +1,4 @@
1
-Cargo.lock
1
target/
2
+grammars/
3
*.wasm
4
+.DS_Store
Cargo.lock
new
+830
@@ -0,0 +1,830 @@
1
+# This file is automatically @generated by Cargo.
2
+# It is not intended for manual editing.
3
+version = 4
4
+
5
+[[package]]
6
+name = "adler2"
7
+version = "2.0.1"
8
+source = "registry+https://github.com/rust-lang/crates.io-index"
9
+checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
10
+
11
+[[package]]
12
+name = "anyhow"
13
+version = "1.0.104"
14
+source = "registry+https://github.com/rust-lang/crates.io-index"
15
+checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470"
16
+
17
+[[package]]
18
+name = "auditable-serde"
19
+version = "0.8.0"
20
+source = "registry+https://github.com/rust-lang/crates.io-index"
21
+checksum = "5c7bf8143dfc3c0258df908843e169b5cc5fcf76c7718bd66135ef4a9cd558c5"
22
+dependencies = [
23
+ "semver",
24
+ "serde",
25
+ "serde_json",
26
+ "topological-sort",
27
+]
28
+
29
+[[package]]
30
+name = "bitflags"
31
+version = "2.13.1"
32
+source = "registry+https://github.com/rust-lang/crates.io-index"
33
+checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da"
34
+
35
+[[package]]
36
+name = "cfg-if"
37
+version = "1.0.4"
38
+source = "registry+https://github.com/rust-lang/crates.io-index"
39
+checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
40
+
41
+[[package]]
42
+name = "crc32fast"
43
+version = "1.5.0"
44
+source = "registry+https://github.com/rust-lang/crates.io-index"
45
+checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511"
46
+dependencies = [
47
+ "cfg-if",
48
+]
49
+
50
+[[package]]
51
+name = "displaydoc"
52
+version = "0.2.7"
53
+source = "registry+https://github.com/rust-lang/crates.io-index"
54
+checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8"
55
+dependencies = [
56
+ "proc-macro2",
57
+ "quote",
58
+ "syn 3.0.3",
59
+]
60
+
61
+[[package]]
62
+name = "equivalent"
63
+version = "1.0.2"
64
+source = "registry+https://github.com/rust-lang/crates.io-index"
65
+checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
66
+
67
+[[package]]
68
+name = "flate2"
69
+version = "1.1.9"
70
+source = "registry+https://github.com/rust-lang/crates.io-index"
71
+checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c"
72
+dependencies = [
73
+ "crc32fast",
74
+ "miniz_oxide",
75
+]
76
+
77
+[[package]]
78
+name = "foldhash"
79
+version = "0.1.5"
80
+source = "registry+https://github.com/rust-lang/crates.io-index"
81
+checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
82
+
83
+[[package]]
84
+name = "form_urlencoded"
85
+version = "1.2.2"
86
+source = "registry+https://github.com/rust-lang/crates.io-index"
87
+checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
88
+dependencies = [
89
+ "percent-encoding",
90
+]
91
+
92
+[[package]]
93
+name = "futures"
94
+version = "0.3.34"
95
+source = "registry+https://github.com/rust-lang/crates.io-index"
96
+checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3"
97
+dependencies = [
98
+ "futures-channel",
99
+ "futures-core",
100
+ "futures-executor",
101
+ "futures-io",
102
+ "futures-sink",
103
+ "futures-task",
104
+ "futures-util",
105
+]
106
+
107
+[[package]]
108
+name = "futures-channel"
109
+version = "0.3.34"
110
+source = "registry+https://github.com/rust-lang/crates.io-index"
111
+checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4"
112
+dependencies = [
113
+ "futures-core",
114
+ "futures-sink",
115
+]
116
+
117
+[[package]]
118
+name = "futures-core"
119
+version = "0.3.34"
120
+source = "registry+https://github.com/rust-lang/crates.io-index"
121
+checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e"
122
+
123
+[[package]]
124
+name = "futures-executor"
125
+version = "0.3.34"
126
+source = "registry+https://github.com/rust-lang/crates.io-index"
127
+checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432"
128
+dependencies = [
129
+ "futures-core",
130
+ "futures-task",
131
+ "futures-util",
132
+]
133
+
134
+[[package]]
135
+name = "futures-io"
136
+version = "0.3.34"
137
+source = "registry+https://github.com/rust-lang/crates.io-index"
138
+checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed"
139
+
140
+[[package]]
141
+name = "futures-macro"
142
+version = "0.3.34"
143
+source = "registry+https://github.com/rust-lang/crates.io-index"
144
+checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44"
145
+dependencies = [
146
+ "proc-macro2",
147
+ "quote",
148
+ "syn 3.0.3",
149
+]
150
+
151
+[[package]]
152
+name = "futures-sink"
153
+version = "0.3.34"
154
+source = "registry+https://github.com/rust-lang/crates.io-index"
155
+checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d"
156
+
157
+[[package]]
158
+name = "futures-task"
159
+version = "0.3.34"
160
+source = "registry+https://github.com/rust-lang/crates.io-index"
161
+checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd"
162
+
163
+[[package]]
164
+name = "futures-util"
165
+version = "0.3.34"
166
+source = "registry+https://github.com/rust-lang/crates.io-index"
167
+checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc"
168
+dependencies = [
169
+ "futures-channel",
170
+ "futures-core",
171
+ "futures-io",
172
+ "futures-macro",
173
+ "futures-sink",
174
+ "futures-task",
175
+ "memchr",
176
+ "pin-project-lite",
177
+ "slab",
178
+]
179
+
180
+[[package]]
181
+name = "hashbrown"
182
+version = "0.15.5"
183
+source = "registry+https://github.com/rust-lang/crates.io-index"
184
+checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
185
+dependencies = [
186
+ "foldhash",
187
+]
188
+
189
+[[package]]
190
+name = "hashbrown"
191
+version = "0.17.1"
192
+source = "registry+https://github.com/rust-lang/crates.io-index"
193
+checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a"
194
+
195
+[[package]]
196
+name = "heck"
197
+version = "0.5.0"
198
+source = "registry+https://github.com/rust-lang/crates.io-index"
199
+checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
200
+
201
+[[package]]
202
+name = "icu_collections"
203
+version = "2.3.0"
204
+source = "registry+https://github.com/rust-lang/crates.io-index"
205
+checksum = "fa68d21081c4a05d5a901a1c62add574c77048b6a1c67be3b50ce0b60d4ca513"
206
+dependencies = [
207
+ "displaydoc",
208
+ "potential_utf",
209
+ "utf8_iter",
210
+ "yoke",
211
+ "zerofrom",
212
+ "zerovec",
213
+]
214
+
215
+[[package]]
216
+name = "icu_locale_core"
217
+version = "2.3.0"
218
+source = "registry+https://github.com/rust-lang/crates.io-index"
219
+checksum = "d56e28588da92eee5c3201a6eff33fabdd49b62269c8938d4ff050ce4d900deb"
220
+dependencies = [
221
+ "displaydoc",
222
+ "litemap",
223
+ "tinystr",
224
+ "writeable",
225
+ "zerovec",
226
+]
227
+
228
+[[package]]
229
+name = "icu_normalizer"
230
+version = "2.3.0"
231
+source = "registry+https://github.com/rust-lang/crates.io-index"
232
+checksum = "12f9cf5f235641ed274641dd81c3f28d870e276763d0797aeeab72317b1c646f"
233
+dependencies = [
234
+ "icu_collections",
235
+ "icu_normalizer_data",
236
+ "icu_properties",
237
+ "icu_provider",
238
+ "smallvec",
239
+ "zerovec",
240
+]
241
+
242
+[[package]]
243
+name = "icu_normalizer_data"
244
+version = "2.3.0"
245
+source = "registry+https://github.com/rust-lang/crates.io-index"
246
+checksum = "1563da1ed3e0b3bf3d74c9b85917ac9c56464d2f57242270c09c9e752f8021a0"
247
+
248
+[[package]]
249
+name = "icu_properties"
250
+version = "2.3.0"
251
+source = "registry+https://github.com/rust-lang/crates.io-index"
252
+checksum = "7e7ca276ad3145661a65914e6daf131ca5120cd3dcee8f8f3214b8875184a148"
253
+dependencies = [
254
+ "displaydoc",
255
+ "icu_collections",
256
+ "icu_locale_core",
257
+ "icu_properties_data",
258
+ "icu_provider",
259
+ "zerotrie",
260
+ "zerovec",
261
+]
262
+
263
+[[package]]
264
+name = "icu_properties_data"
265
+version = "2.3.0"
266
+source = "registry+https://github.com/rust-lang/crates.io-index"
267
+checksum = "e590f038c1464a96894fd6d10127e90a8be4509f56ff7ecef851b15cee0b7caa"
268
+
269
+[[package]]
270
+name = "icu_provider"
271
+version = "2.3.0"
272
+source = "registry+https://github.com/rust-lang/crates.io-index"
273
+checksum = "92a7ed671a6aad807a8651a2e1782a6598fda9ce5185dd8158549e95a91c6428"
274
+dependencies = [
275
+ "displaydoc",
276
+ "icu_locale_core",
277
+ "writeable",
278
+ "yoke",
279
+ "zerofrom",
280
+ "zerotrie",
281
+ "zerovec",
282
+]
283
+
284
+[[package]]
285
+name = "id-arena"
286
+version = "2.3.0"
287
+source = "registry+https://github.com/rust-lang/crates.io-index"
288
+checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954"
289
+
290
+[[package]]
291
+name = "idna"
292
+version = "1.1.0"
293
+source = "registry+https://github.com/rust-lang/crates.io-index"
294
+checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"
295
+dependencies = [
296
+ "idna_adapter",
297
+ "smallvec",
298
+ "utf8_iter",
299
+]
300
+
301
+[[package]]
302
+name = "idna_adapter"
303
+version = "1.2.2"
304
+source = "registry+https://github.com/rust-lang/crates.io-index"
305
+checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714"
306
+dependencies = [
307
+ "icu_normalizer",
308
+ "icu_properties",
309
+]
310
+
311
+[[package]]
312
+name = "indexmap"
313
+version = "2.14.0"
314
+source = "registry+https://github.com/rust-lang/crates.io-index"
315
+checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9"
316
+dependencies = [
317
+ "equivalent",
318
+ "hashbrown 0.17.1",
319
+ "serde",
320
+ "serde_core",
321
+]
322
+
323
+[[package]]
324
+name = "itoa"
325
+version = "1.0.18"
326
+source = "registry+https://github.com/rust-lang/crates.io-index"
327
+checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
328
+
329
+[[package]]
330
+name = "leb128fmt"
331
+version = "0.1.0"
332
+source = "registry+https://github.com/rust-lang/crates.io-index"
333
+checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
334
+
335
+[[package]]
336
+name = "litemap"
337
+version = "0.8.3"
338
+source = "registry+https://github.com/rust-lang/crates.io-index"
339
+checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae"
340
+
341
+[[package]]
342
+name = "log"
343
+version = "0.4.33"
344
+source = "registry+https://github.com/rust-lang/crates.io-index"
345
+checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad"
346
+
347
+[[package]]
348
+name = "memchr"
349
+version = "2.8.3"
350
+source = "registry+https://github.com/rust-lang/crates.io-index"
351
+checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98"
352
+
353
+[[package]]
354
+name = "miniz_oxide"
355
+version = "0.8.9"
356
+source = "registry+https://github.com/rust-lang/crates.io-index"
357
+checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
358
+dependencies = [
359
+ "adler2",
360
+ "simd-adler32",
361
+]
362
+
363
+[[package]]
364
+name = "once_cell"
365
+version = "1.21.4"
366
+source = "registry+https://github.com/rust-lang/crates.io-index"
367
+checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
368
+
369
+[[package]]
370
+name = "percent-encoding"
371
+version = "2.3.2"
372
+source = "registry+https://github.com/rust-lang/crates.io-index"
373
+checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
374
+
375
+[[package]]
376
+name = "pin-project-lite"
377
+version = "0.2.17"
378
+source = "registry+https://github.com/rust-lang/crates.io-index"
379
+checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
380
+
381
+[[package]]
382
+name = "potential_utf"
383
+version = "0.1.6"
384
+source = "registry+https://github.com/rust-lang/crates.io-index"
385
+checksum = "d83eb9bc6d8e5cf568e7a1101d60ee05e81ed50ea106026f3d18deeb046d7661"
386
+dependencies = [
387
+ "zerovec",
388
+]
389
+
390
+[[package]]
391
+name = "prettyplease"
392
+version = "0.2.37"
393
+source = "registry+https://github.com/rust-lang/crates.io-index"
394
+checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
395
+dependencies = [
396
+ "proc-macro2",
397
+ "syn 2.0.119",
398
+]
399
+
400
+[[package]]
401
+name = "proc-macro2"
402
+version = "1.0.107"
403
+source = "registry+https://github.com/rust-lang/crates.io-index"
404
+checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9"
405
+dependencies = [
406
+ "unicode-ident",
407
+]
408
+
409
+[[package]]
410
+name = "quote"
411
+version = "1.0.47"
412
+source = "registry+https://github.com/rust-lang/crates.io-index"
413
+checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001"
414
+dependencies = [
415
+ "proc-macro2",
416
+]
417
+
418
+[[package]]
419
+name = "semver"
420
+version = "1.0.28"
421
+source = "registry+https://github.com/rust-lang/crates.io-index"
422
+checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd"
423
+dependencies = [
424
+ "serde",
425
+ "serde_core",
426
+]
427
+
428
+[[package]]
429
+name = "serde"
430
+version = "1.0.229"
431
+source = "registry+https://github.com/rust-lang/crates.io-index"
432
+checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba"
433
+dependencies = [
434
+ "serde_core",
435
+ "serde_derive",
436
+]
437
+
438
+[[package]]
439
+name = "serde_core"
440
+version = "1.0.229"
441
+source = "registry+https://github.com/rust-lang/crates.io-index"
442
+checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48"
443
+dependencies = [
444
+ "serde_derive",
445
+]
446
+
447
+[[package]]
448
+name = "serde_derive"
449
+version = "1.0.229"
450
+source = "registry+https://github.com/rust-lang/crates.io-index"
451
+checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348"
452
+dependencies = [
453
+ "proc-macro2",
454
+ "quote",
455
+ "syn 3.0.3",
456
+]
457
+
458
+[[package]]
459
+name = "serde_json"
460
+version = "1.0.151"
461
+source = "registry+https://github.com/rust-lang/crates.io-index"
462
+checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14"
463
+dependencies = [
464
+ "itoa",
465
+ "memchr",
466
+ "serde",
467
+ "serde_core",
468
+ "zmij",
469
+]
470
+
471
+[[package]]
472
+name = "simd-adler32"
473
+version = "0.3.10"
474
+source = "registry+https://github.com/rust-lang/crates.io-index"
475
+checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea"
476
+
477
+[[package]]
478
+name = "slab"
479
+version = "0.4.12"
480
+source = "registry+https://github.com/rust-lang/crates.io-index"
481
+checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
482
+
483
+[[package]]
484
+name = "smallvec"
485
+version = "1.15.2"
486
+source = "registry+https://github.com/rust-lang/crates.io-index"
487
+checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90"
488
+
489
+[[package]]
490
+name = "spdx"
491
+version = "0.10.9"
492
+source = "registry+https://github.com/rust-lang/crates.io-index"
493
+checksum = "c3e17e880bafaeb362a7b751ec46bdc5b61445a188f80e0606e68167cd540fa3"
494
+dependencies = [
495
+ "smallvec",
496
+]
497
+
498
+[[package]]
499
+name = "stable_deref_trait"
500
+version = "1.2.1"
501
+source = "registry+https://github.com/rust-lang/crates.io-index"
502
+checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
503
+
504
+[[package]]
505
+name = "syn"
506
+version = "2.0.119"
507
+source = "registry+https://github.com/rust-lang/crates.io-index"
508
+checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297"
509
+dependencies = [
510
+ "proc-macro2",
511
+ "quote",
512
+ "unicode-ident",
513
+]
514
+
515
+[[package]]
516
+name = "syn"
517
+version = "3.0.3"
518
+source = "registry+https://github.com/rust-lang/crates.io-index"
519
+checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3"
520
+dependencies = [
521
+ "proc-macro2",
522
+ "quote",
523
+ "unicode-ident",
524
+]
525
+
526
+[[package]]
527
+name = "synstructure"
528
+version = "0.13.2"
529
+source = "registry+https://github.com/rust-lang/crates.io-index"
530
+checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
531
+dependencies = [
532
+ "proc-macro2",
533
+ "quote",
534
+ "syn 2.0.119",
535
+]
536
+
537
+[[package]]
538
+name = "tinystr"
539
+version = "0.8.4"
540
+source = "registry+https://github.com/rust-lang/crates.io-index"
541
+checksum = "b1e27c91459209c2986af3dcf603a5a74a4368754ce37414f59acc971167f643"
542
+dependencies = [
543
+ "displaydoc",
544
+ "zerovec",
545
+]
546
+
547
+[[package]]
548
+name = "topological-sort"
549
+version = "0.2.2"
550
+source = "registry+https://github.com/rust-lang/crates.io-index"
551
+checksum = "ea68304e134ecd095ac6c3574494fc62b909f416c4fca77e440530221e549d3d"
552
+
553
+[[package]]
554
+name = "unicode-ident"
555
+version = "1.0.24"
556
+source = "registry+https://github.com/rust-lang/crates.io-index"
557
+checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
558
+
559
+[[package]]
560
+name = "unicode-xid"
561
+version = "0.2.6"
562
+source = "registry+https://github.com/rust-lang/crates.io-index"
563
+checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
564
+
565
+[[package]]
566
+name = "url"
567
+version = "2.5.8"
568
+source = "registry+https://github.com/rust-lang/crates.io-index"
569
+checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed"
570
+dependencies = [
571
+ "form_urlencoded",
572
+ "idna",
573
+ "percent-encoding",
574
+ "serde",
575
+]
576
+
577
+[[package]]
578
+name = "utf8_iter"
579
+version = "1.0.4"
580
+source = "registry+https://github.com/rust-lang/crates.io-index"
581
+checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
582
+
583
+[[package]]
584
+name = "wasm-encoder"
585
+version = "0.227.1"
586
+source = "registry+https://github.com/rust-lang/crates.io-index"
587
+checksum = "80bb72f02e7fbf07183443b27b0f3d4144abf8c114189f2e088ed95b696a7822"
588
+dependencies = [
589
+ "leb128fmt",
590
+ "wasmparser",
591
+]
592
+
593
+[[package]]
594
+name = "wasm-metadata"
595
+version = "0.227.1"
596
+source = "registry+https://github.com/rust-lang/crates.io-index"
597
+checksum = "ce1ef0faabbbba6674e97a56bee857ccddf942785a336c8b47b42373c922a91d"
598
+dependencies = [
599
+ "anyhow",
600
+ "auditable-serde",
601
+ "flate2",
602
+ "indexmap",
603
+ "serde",
604
+ "serde_derive",
605
+ "serde_json",
606
+ "spdx",
607
+ "url",
608
+ "wasm-encoder",
609
+ "wasmparser",
610
+]
611
+
612
+[[package]]
613
+name = "wasmparser"
614
+version = "0.227.1"
615
+source = "registry+https://github.com/rust-lang/crates.io-index"
616
+checksum = "0f51cad774fb3c9461ab9bccc9c62dfb7388397b5deda31bf40e8108ccd678b2"
617
+dependencies = [
618
+ "bitflags",
619
+ "hashbrown 0.15.5",
620
+ "indexmap",
621
+ "semver",
622
+]
623
+
624
+[[package]]
625
+name = "wit-bindgen"
626
+version = "0.41.0"
627
+source = "registry+https://github.com/rust-lang/crates.io-index"
628
+checksum = "10fb6648689b3929d56bbc7eb1acf70c9a42a29eb5358c67c10f54dbd5d695de"
629
+dependencies = [
630
+ "wit-bindgen-rt",
631
+ "wit-bindgen-rust-macro",
632
+]
633
+
634
+[[package]]
635
+name = "wit-bindgen-core"
636
+version = "0.41.0"
637
+source = "registry+https://github.com/rust-lang/crates.io-index"
638
+checksum = "92fa781d4f2ff6d3f27f3cc9b74a73327b31ca0dc4a3ef25a0ce2983e0e5af9b"
639
+dependencies = [
640
+ "anyhow",
641
+ "heck",
642
+ "wit-parser",
643
+]
644
+
645
+[[package]]
646
+name = "wit-bindgen-rt"
647
+version = "0.41.0"
648
+source = "registry+https://github.com/rust-lang/crates.io-index"
649
+checksum = "c4db52a11d4dfb0a59f194c064055794ee6564eb1ced88c25da2cf76e50c5621"
650
+dependencies = [
651
+ "bitflags",
652
+ "futures",
653
+ "once_cell",
654
+]
655
+
656
+[[package]]
657
+name = "wit-bindgen-rust"
658
+version = "0.41.0"
659
+source = "registry+https://github.com/rust-lang/crates.io-index"
660
+checksum = "9d0809dc5ba19e2e98661bf32fc0addc5a3ca5bf3a6a7083aa6ba484085ff3ce"
661
+dependencies = [
662
+ "anyhow",
663
+ "heck",
664
+ "indexmap",
665
+ "prettyplease",
666
+ "syn 2.0.119",
667
+ "wasm-metadata",
668
+ "wit-bindgen-core",
669
+ "wit-component",
670
+]
671
+
672
+[[package]]
673
+name = "wit-bindgen-rust-macro"
674
+version = "0.41.0"
675
+source = "registry+https://github.com/rust-lang/crates.io-index"
676
+checksum = "ad19eec017904e04c60719592a803ee5da76cb51c81e3f6fbf9457f59db49799"
677
+dependencies = [
678
+ "anyhow",
679
+ "prettyplease",
680
+ "proc-macro2",
681
+ "quote",
682
+ "syn 2.0.119",
683
+ "wit-bindgen-core",
684
+ "wit-bindgen-rust",
685
+]
686
+
687
+[[package]]
688
+name = "wit-component"
689
+version = "0.227.1"
690
+source = "registry+https://github.com/rust-lang/crates.io-index"
691
+checksum = "635c3adc595422cbf2341a17fb73a319669cc8d33deed3a48368a841df86b676"
692
+dependencies = [
693
+ "anyhow",
694
+ "bitflags",
695
+ "indexmap",
696
+ "log",
697
+ "serde",
698
+ "serde_derive",
699
+ "serde_json",
700
+ "wasm-encoder",
701
+ "wasm-metadata",
702
+ "wasmparser",
703
+ "wit-parser",
704
+]
705
+
706
+[[package]]
707
+name = "wit-parser"
708
+version = "0.227.1"
709
+source = "registry+https://github.com/rust-lang/crates.io-index"
710
+checksum = "ddf445ed5157046e4baf56f9138c124a0824d4d1657e7204d71886ad8ce2fc11"
711
+dependencies = [
712
+ "anyhow",
713
+ "id-arena",
714
+ "indexmap",
715
+ "log",
716
+ "semver",
717
+ "serde",
718
+ "serde_derive",
719
+ "serde_json",
720
+ "unicode-xid",
721
+ "wasmparser",
722
+]
723
+
724
+[[package]]
725
+name = "writeable"
726
+version = "0.6.4"
727
+source = "registry+https://github.com/rust-lang/crates.io-index"
728
+checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc"
729
+
730
+[[package]]
731
+name = "yoke"
732
+version = "0.8.3"
733
+source = "registry+https://github.com/rust-lang/crates.io-index"
734
+checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5"
735
+dependencies = [
736
+ "stable_deref_trait",
737
+ "yoke-derive",
738
+ "zerofrom",
739
+]
740
+
741
+[[package]]
742
+name = "yoke-derive"
743
+version = "0.8.2"
744
+source = "registry+https://github.com/rust-lang/crates.io-index"
745
+checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e"
746
+dependencies = [
747
+ "proc-macro2",
748
+ "quote",
749
+ "syn 2.0.119",
750
+ "synstructure",
751
+]
752
+
753
+[[package]]
754
+name = "zed_extension_api"
755
+version = "0.7.0"
756
+source = "registry+https://github.com/rust-lang/crates.io-index"
757
+checksum = "0729d50b4ca0a7e28e590bbe32e3ca0194d97ef654961451a424c661a366fca0"
758
+dependencies = [
759
+ "serde",
760
+ "serde_json",
761
+ "wit-bindgen",
762
+]
763
+
764
+[[package]]
765
+name = "zed_smbcloud"
766
+version = "0.1.0"
767
+dependencies = [
768
+ "serde",
769
+ "zed_extension_api",
770
+]
771
+
772
+[[package]]
773
+name = "zerofrom"
774
+version = "0.1.8"
775
+source = "registry+https://github.com/rust-lang/crates.io-index"
776
+checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272"
777
+dependencies = [
778
+ "zerofrom-derive",
779
+]
780
+
781
+[[package]]
782
+name = "zerofrom-derive"
783
+version = "0.1.7"
784
+source = "registry+https://github.com/rust-lang/crates.io-index"
785
+checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1"
786
+dependencies = [
787
+ "proc-macro2",
788
+ "quote",
789
+ "syn 2.0.119",
790
+ "synstructure",
791
+]
792
+
793
+[[package]]
794
+name = "zerotrie"
795
+version = "0.2.5"
796
+source = "registry+https://github.com/rust-lang/crates.io-index"
797
+checksum = "4ea269c3bd32f0a32c321907a2ae912ba6f4649bb0fc764a15627e99a7095a3f"
798
+dependencies = [
799
+ "displaydoc",
800
+ "yoke",
801
+ "zerofrom",
802
+]
803
+
804
+[[package]]
805
+name = "zerovec"
806
+version = "0.11.7"
807
+source = "registry+https://github.com/rust-lang/crates.io-index"
808
+checksum = "94b5c6b5976d66c1d703c4fd17d3f5e43c8cedaacf604961b171adc7130896d8"
809
+dependencies = [
810
+ "yoke",
811
+ "zerofrom",
812
+ "zerovec-derive",
813
+]
814
+
815
+[[package]]
816
+name = "zerovec-derive"
817
+version = "0.11.4"
818
+source = "registry+https://github.com/rust-lang/crates.io-index"
819
+checksum = "47402523226a02bfe5230160dc3ccc089aa6f6f19e7fcbb4e6f824bbb1b4aa62"
820
+dependencies = [
821
+ "proc-macro2",
822
+ "quote",
823
+ "syn 3.0.3",
824
+]
825
+
826
+[[package]]
827
+name = "zmij"
828
+version = "1.0.23"
829
+source = "registry+https://github.com/rust-lang/crates.io-index"
830
+checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b"
Cargo.toml
+9
-3
@@ -1,12 +1,18 @@
1
[package]
2
-name = "smbcloud-zed-extension"
2
+name = "zed_smbcloud"
3
version = "0.1.0"
4
edition = "2021"
5
+publish = false
6
license = "Apache-2.0"
7
8
+[lints.clippy]
9
+dbg_macro = "deny"
10
+todo = "deny"
11
+
12
[lib]
8
-path = "src/smbcloud_zed_extension.rs"
13
+path = "src/lib.rs"
14
crate-type = ["cdylib"]
15
16
[dependencies]
12
-zed_extension_api = "0.1.0"
17
+serde = { version = "1.0", features = ["derive"] }
18
+zed_extension_api = "0.7.0"
LICENSE
new
+190
@@ -0,0 +1,190 @@
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship made available under
36
+ the License, as indicated by a copyright notice that is included in
37
+ or attached to the work (an example is provided in the Appendix below).
38
+
39
+ "Derivative Works" shall mean any work, whether in Source or Object
40
+ form, that is based on (or derived from) the Work and for which the
41
+ editorial revisions, annotations, elaborations, or other modifications
42
+ represent, as a whole, an original work of authorship. For the purposes
43
+ of this License, Derivative Works shall not include works that remain
44
+ separable from, or merely link (or bind by name) to the interfaces of,
45
+ the Work and Derivative Works thereof.
46
+
47
+ "Contribution" shall mean, as defined by the copyright owner or by the
48
+ Legal Entity authorized to submit on behalf of the copyright owner, any
49
+ work of authorship, including the original version of the Work and any
50
+ modifications or additions to that Work or Derivative Works of the Work.
51
+
52
+ "Contributor" shall mean Licensor and any Legal Entity on behalf of
53
+ whom a Contribution has been received by the Licensor and subsequently
54
+ incorporated within the Work.
55
+
56
+ 2. Grant of Copyright License. Subject to the terms and conditions of
57
+ this License, each Contributor hereby grants to You a perpetual,
58
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
59
+ copyright license to reproduce, prepare Derivative Works of,
60
+ publicly display, publicly perform, sublicense, and distribute the
61
+ Work and such Derivative Works in Source or Object form.
62
+
63
+ 3. Grant of Patent License. Subject to the terms and conditions of
64
+ this License, each Contributor hereby grants to You a perpetual,
65
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
66
+ (except as stated in this section) patent license to make, have made,
67
+ use, offer to sell, sell, import, and otherwise transfer the Work,
68
+ where such license applies only to those patent claims licensable
69
+ by such Contributor that are necessarily infringed by their
70
+ Contribution(s) alone or by combination of their Contribution(s)
71
+ with the Work to which such Contribution(s) was submitted. If You
72
+ institute patent litigation against any entity (including a
73
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
74
+ or a Contribution incorporated within the Work constitutes direct
75
+ or contributory patent infringement, then any and all patent licenses
76
+ granted to You under this License for that Work shall terminate
77
+ as of the date such litigation is filed.
78
+
79
+ 4. Redistribution. You may reproduce and distribute copies of the
80
+ Work or Derivative Works thereof in any medium, with or without
81
+ modifications, and in Source or Object form, provided that You
82
+ meet the following conditions:
83
+
84
+ (a) You must give any other recipients of the Work or
85
+ Derivative Works a copy of this License; and
86
+
87
+ (b) You must cause any modified files to carry prominent notices
88
+ stating that You changed the files; and
89
+
90
+ (c) You must retain, in the Source form of any Derivative Works
91
+ that You distribute, all copyright, patent, trademark, and
92
+ attribution notices from the Source form of the Work,
93
+ excluding those notices that do not pertain to any part of
94
+ the Derivative Works; and
95
+
96
+ (d) If the Work includes a "NOTICE" text file as part of its
97
+ distribution, You must include a readable copy of the
98
+ attribution notices contained within such NOTICE file, in
99
+ at least one of the following places: within a NOTICE text
100
+ file distributed as part of the Derivative Works; within
101
+ the Source form or documentation, if provided along with the
102
+ Derivative Works; or, within a display generated by the
103
+ Derivative Works, if and wherever such third-party notices
104
+ normally appear. The contents of the NOTICE file are for
105
+ informational purposes only and do not modify the License.
106
+ You may add Your own attribution notices within Derivative
107
+ Works that You distribute, alongside or as an addendum to
108
+ the NOTICE text from the Work, provided that such additional
109
+ attribution notices cannot be construed as modifying the License.
110
+
111
+ You may add Your own license statement for Your modifications and
112
+ may provide additional grant of rights to use, copy, modify, merge,
113
+ publish, distribute, sublicense, and/or sell copies of the Work,
114
+ and to permit persons to whom the Work is furnished to do so,
115
+ subject to the following conditions:
116
+
117
+ The above copyright notice and this permission notice shall be
118
+ included in all copies or substantial portions of the Work.
119
+
120
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
121
+ any Contribution intentionally submitted for inclusion in the Work
122
+ by You to the Licensor shall be under the terms and conditions of
123
+ this License, without any additional terms or conditions.
124
+ Notwithstanding the above, nothing herein shall supersede or modify
125
+ the terms of any separate license agreement you may have executed
126
+ with Licensor regarding such Contributions.
127
+
128
+ 6. Trademarks. This License does not grant permission to use the trade
129
+ names, trademarks, service marks, or product names of the Licensor,
130
+ except as required for reasonable and customary use in describing the
131
+ origin of the Work and reproducing the content of the NOTICE file.
132
+
133
+ 7. Disclaimer of Warranty. Unless required by applicable law or
134
+ agreed to in writing, Licensor provides the Work (and each
135
+ Contributor provides its Contributions) on an "AS IS" BASIS,
136
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
137
+ implied, including, without limitation, any warranties or conditions
138
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
139
+ PARTICULAR PURPOSE. You are solely responsible for determining the
140
+ appropriateness of using or redistributing the Work and assume any
141
+ risks associated with Your exercise of permissions under this License.
142
+
143
+ 8. Limitation of Liability. In no event and under no legal theory,
144
+ whether in tort (including negligence), contract, or otherwise,
145
+ unless required by applicable law (such as deliberate and grossly
146
+ negligent acts) or agreed to in writing, shall any Contributor be
147
+ liable to You for damages, including any direct, indirect, special,
148
+ incidental, or exemplary damages of any character arising as a
149
+ result of this License or out of the use or inability to use the
150
+ Work (including but not limited to damages for loss of goodwill,
151
+ work stoppage, computer failure or malfunction, or all other
152
+ commercial damages or losses), even if such Contributor has been
153
+ advised of the possibility of such damages.
154
+
155
+ 9. Accepting Warranty or Additional Liability. While redistributing
156
+ the Work or Derivative Works thereof, You may choose to offer,
157
+ and charge a fee for, acceptance of support, warranty, indemnity,
158
+ or other liability obligations and/or rights consistent with this
159
+ License. However, in accepting such obligations, You may act only
160
+ on Your own behalf and on Your sole responsibility, not on behalf
161
+ of any other Contributor, and only if You agree to indemnify,
162
+ defend, and hold each Contributor harmless for any liability
163
+ incurred by, or claims asserted against, such Contributor by reason
164
+ of your accepting any such warranty or additional liability.
165
+
166
+ END OF TERMS AND CONDITIONS
167
+
168
+ APPENDIX: How to apply the Apache License to your work.
169
+
170
+ To apply the Apache License to your work, attach the following
171
+ boilerplate notice, with the fields enclosed by brackets "[]"
172
+ replaced with your own identifying information. (Don't include
173
+ the brackets!) The text should be enclosed in the appropriate
174
+ comment syntax for the file format in use. Also, it is recommended
175
+ that a file or directory name be given on the same line as the
176
+ copyright notice for easier identification within third-party archives.
177
+
178
+ Copyright 2026 Splitfire AB (smbCloud)
179
+
180
+ Licensed under the Apache License, Version 2.0 (the "License");
181
+ you may not use this file except in compliance with the License.
182
+ You may obtain a copy of the License at
183
+
184
+ http://www.apache.org/licenses/LICENSE-2.0
185
+
186
+ Unless required by applicable law or agreed to in writing, software
187
+ distributed under the License is distributed on an "AS IS" BASIS,
188
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
189
+ See the License for the specific language governing permissions and
190
+ limitations under the License.
LICENSE-APACHE
deleted
-176
@@ -1,176 +0,0 @@
1
- Apache License
2
- Version 2.0, January 2004
3
- http://www.apache.org/licenses/
4
-
5
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
-
7
-1. Definitions.
8
-
9
- "License" shall mean the terms and conditions for use, reproduction,
10
- and distribution as defined by Sections 1 through 9 of this document.
11
-
12
- "Licensor" shall mean the copyright owner or entity authorized by
13
- the copyright owner that is granting the License.
14
-
15
- "Legal Entity" shall mean the union of the acting entity and all
16
- other entities that control, are controlled by, or are under common
17
- control with that entity. For the purposes of this definition,
18
- "control" means (i) the power, direct or indirect, to cause the
19
- direction or management of such entity, whether by contract or
20
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
- outstanding shares, or (iii) beneficial ownership of such entity.
22
-
23
- "You" (or "Your") shall mean an individual or Legal Entity
24
- exercising permissions granted by this License.
25
-
26
- "Source" form shall mean the preferred form for making modifications,
27
- including but not limited to software source code, documentation
28
- source, and configuration files.
29
-
30
- "Object" form shall mean any form resulting from mechanical
31
- transformation or translation of a Source form, including but
32
- not limited to compiled object code, generated documentation,
33
- and conversions to other media types.
34
-
35
- "Work" shall mean the work of authorship, whether in Source or
36
- Object form, made available under the License, as indicated by a
37
- copyright notice that is included in or attached to the work
38
- (an example is provided in the Appendix below).
39
-
40
- "Derivative Works" shall mean any work, whether in Source or Object
41
- form, that is based on (or derived from) the Work and for which the
42
- editorial revisions, annotations, elaborations, or other modifications
43
- represent, as a whole, an original work of authorship. For the purposes
44
- of this License, Derivative Works shall not include works that remain
45
- separable from, or merely link (or bind by name) to the interfaces of,
46
- the Work and Derivative Works thereof.
47
-
48
- "Contribution" shall mean any work of authorship, including
49
- the original version of the Work and any modifications or additions
50
- to that Work or Derivative Works thereof, that is intentionally
51
- submitted to Licensor for inclusion in the Work by the copyright owner
52
- or by an individual or Legal Entity authorized to submit on behalf of
53
- the copyright owner. For the purposes of this definition, "submitted"
54
- means any form of electronic, verbal, or written communication sent
55
- to the Licensor or its representatives, including but not limited to
56
- communication on electronic mailing lists, source code control systems,
57
- and issue tracking systems that are managed by, or on behalf of, the
58
- Licensor for the purpose of discussing and improving the Work, but
59
- excluding communication that is conspicuously marked or otherwise
60
- designated in writing by the copyright owner as "Not a Contribution."
61
-
62
- "Contributor" shall mean Licensor and any individual or Legal Entity
63
- on behalf of whom a Contribution has been received by Licensor and
64
- subsequently incorporated within the Work.
65
-
66
-2. Grant of Copyright License. Subject to the terms and conditions of
67
- this License, each Contributor hereby grants to You a perpetual,
68
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
- copyright license to reproduce, prepare Derivative Works of,
70
- publicly display, publicly perform, sublicense, and distribute the
71
- Work and such Derivative Works in Source or Object form.
72
-
73
-3. Grant of Patent License. Subject to the terms and conditions of
74
- this License, each Contributor hereby grants to You a perpetual,
75
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
- (except as stated in this section) patent license to make, have made,
77
- use, offer to sell, sell, import, and otherwise transfer the Work,
78
- where such license applies only to those patent claims licensable
79
- by such Contributor that are necessarily infringed by their
80
- Contribution(s) alone or by combination of their Contribution(s)
81
- with the Work to which such Contribution(s) was submitted. If You
82
- institute patent litigation against any entity (including a
83
- cross-claim or counterclaim in a lawsuit) alleging that the Work
84
- or a Contribution incorporated within the Work constitutes direct
85
- or contributory patent infringement, then any patent licenses
86
- granted to You under this License for that Work shall terminate
87
- as of the date such litigation is filed.
88
-
89
-4. Redistribution. You may reproduce and distribute copies of the
90
- Work or Derivative Works thereof in any medium, with or without
91
- modifications, and in Source or Object form, provided that You
92
- meet the following conditions:
93
-
94
- (a) You must give any other recipients of the Work or
95
- Derivative Works a copy of this License; and
96
-
97
- (b) You must cause any modified files to carry prominent notices
98
- stating that You changed the files; and
99
-
100
- (c) You must retain, in the Source form of any Derivative Works
101
- that You distribute, all copyright, patent, trademark, and
102
- attribution notices from the Source form of the Work,
103
- excluding those notices that do not pertain to any part of
104
- the Derivative Works; and
105
-
106
- (d) If the Work includes a "NOTICE" text file as part of its
107
- distribution, then any Derivative Works that You distribute must
108
- include a readable copy of the attribution notices contained
109
- within such NOTICE file, excluding those notices that do not
110
- pertain to any part of the Derivative Works, in at least one
111
- of the following places: within a NOTICE text file distributed
112
- as part of the Derivative Works; within the Source form or
113
- documentation, if provided along with the Derivative Works; or,
114
- within a display generated by the Derivative Works, if and
115
- wherever such third-party notices normally appear. The contents
116
- of the NOTICE file are for informational purposes only and
117
- do not modify the License. You may add Your own attribution
118
- notices within Derivative Works that You distribute, alongside
119
- or as an addendum to the NOTICE text from the Work, provided
120
- that such additional attribution notices cannot be construed
121
- as modifying the License.
122
-
123
- You may add Your own copyright statement to Your modifications and
124
- may provide additional or different license terms and conditions
125
- for use, reproduction, or distribution of Your modifications, or
126
- for any such Derivative Works as a whole, provided Your use,
127
- reproduction, and distribution of the Work otherwise complies with
128
- the conditions stated in this License.
129
-
130
-5. Submission of Contributions. Unless You explicitly state otherwise,
131
- any Contribution intentionally submitted for inclusion in the Work
132
- by You to the Licensor shall be under the terms and conditions of
133
- this License, without any additional terms or conditions.
134
- Notwithstanding the above, nothing herein shall supersede or modify
135
- the terms of any separate license agreement you may have executed
136
- with Licensor regarding such Contributions.
137
-
138
-6. Trademarks. This License does not grant permission to use the trade
139
- names, trademarks, service marks, or product names of the Licensor,
140
- except as required for reasonable and customary use in describing the
141
- origin of the Work and reproducing the content of the NOTICE file.
142
-
143
-7. Disclaimer of Warranty. Unless required by applicable law or
144
- agreed to in writing, Licensor provides the Work (and each
145
- Contributor provides its Contributions) on an "AS IS" BASIS,
146
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
- implied, including, without limitation, any warranties or conditions
148
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
- PARTICULAR PURPOSE. You are solely responsible for determining the
150
- appropriateness of using or redistributing the Work and assume any
151
- risks associated with Your exercise of permissions under this License.
152
-
153
-8. Limitation of Liability. In no event and under no legal theory,
154
- whether in tort (including negligence), contract, or otherwise,
155
- unless required by applicable law (such as deliberate and grossly
156
- negligent acts) or agreed to in writing, shall any Contributor be
157
- liable to You for damages, including any direct, indirect, special,
158
- incidental, or consequential damages of any character arising as a
159
- result of this License or out of the use or inability to use the
160
- Work (including but not limited to damages for loss of goodwill,
161
- work stoppage, computer failure or malfunction, or any and all
162
- other commercial damages or losses), even if such Contributor
163
- has been advised of the possibility of such damages.
164
-
165
-9. Accepting Warranty or Additional Liability. While redistributing
166
- the Work or Derivative Works thereof, You may choose to offer,
167
- and charge a fee for, acceptance of support, warranty, indemnity,
168
- or other liability obligations and/or rights consistent with this
169
- License. However, in accepting such obligations, You may act only
170
- on Your own behalf and on Your sole responsibility, not on behalf
171
- of any other Contributor, and only if You agree to indemnify,
172
- defend, and hold each Contributor harmless for any liability
173
- incurred by, or claims asserted against, such Contributor by reason
174
- of your accepting any such warranty or additional liability.
175
-
176
-END OF TERMS AND CONDITIONS
README.md
+98
-2
@@ -1,3 +1,99 @@
1
-# smbCloud Zed Extension
1
+# smbCloud extension for Zed
2
3
-Easy deployment with smbCloud Zed Extension.
3
+Adds the [smbCloud CLI](https://github.com/smbcloudXYZ/smbcloud-cli) as an MCP
4
+server in Zed, so the agent can work with your mail domains, inbox routes, auth
5
+apps, projects, tenants, and deploys.
6
+
7
+## Install
8
+
9
+From Zed: `zed: extensions` → search for **smbCloud** → Install.
10
+
11
+Then sign in once from a terminal — the server reuses the session the CLI writes
12
+to disk:
13
+
14
+```sh
15
+npx -y @smbcloud/cli login
16
+```
17
+
18
+## Settings
19
+
20
+Configure it in Zed's settings under `context_servers.smbcloud`:
21
+
22
+```json
23
+{
24
+ "context_servers": {
25
+ "smbcloud": {
26
+ "source": "extension",
27
+ "settings": {
28
+ "scope": "cloud",
29
+ "environment": "production",
30
+ "mail_api_key": "smb_mail_..."
31
+ }
32
+ }
33
+ }
34
+}
35
+```
36
+
37
+| Setting | Values | Notes |
38
+| --- | --- | --- |
39
+| `scope` | `cloud` (default), `automation` | `cloud` serves smbCloud resources; `automation` serves the mobile and TV device tools |
40
+| `environment` | `production` (default), `dev` | Which API to talk to |
41
+| `mail_api_key` | `smb_mail_...` | Only `mail_send` needs it; passed through as `SMB_MAIL_API_KEY` |
42
+
43
+By default the extension installs `@smbcloud/cli` from npm and runs it with
44
+Zed's bundled Node. If you already have `smb` on your machine, point at it
45
+instead and skip the download:
46
+
47
+```json
48
+{
49
+ "context_servers": {
50
+ "smbcloud": {
51
+ "source": "extension",
52
+ "command": { "path": "/opt/homebrew/bin/smb" }
53
+ }
54
+ }
55
+}
56
+```
57
+
58
+## Without the extension
59
+
60
+The CLI is published to the [MCP registry](https://github.com/modelcontextprotocol/registry)
61
+as `io.github.smbcloudXYZ/smbcloud-cli`, so you can also add it as a custom
62
+local server and skip this extension entirely:
63
+
64
+```json
65
+{
66
+ "context_servers": {
67
+ "smbcloud": {
68
+ "command": "npx",
69
+ "args": ["-y", "@smbcloud/cli", "--mcp"],
70
+ "env": { "SMB_MAIL_API_KEY": "smb_mail_..." }
71
+ }
72
+ }
73
+}
74
+```
75
+
76
+## Development
77
+
78
+```sh
79
+rustup target add wasm32-wasip2
80
+cargo build --release --target wasm32-wasip2
81
+```
82
+
83
+Then run `zed: install dev extension` and pick this directory. Logs go to
84
+`~/Library/Logs/Zed/Zed.log`, or run `zed --foreground` for verbose output.
85
+
86
+## Publishing
87
+
88
+Zed's registry works by submodule. Open a PR against
89
+[`zed-industries/extensions`](https://github.com/zed-industries/extensions) that:
90
+
91
+1. adds this repo as a submodule at `extensions/smbcloud`
92
+2. adds an entry to the top-level `extensions.toml` with the submodule path and version
93
+3. runs `pnpm sort-extensions`
94
+
95
+Keep `version` in `extension.toml` in step with that entry.
96
+
97
+## License
98
+
99
+Apache-2.0, matching the CLI.
configuration/default_settings.jsonc
new
+8
@@ -0,0 +1,8 @@
1
+{
2
+ /// Which tool profile to expose: "cloud" or "automation".
3
+ "scope": "cloud",
4
+ /// Which smbCloud API environment to talk to: "production" or "dev".
5
+ "environment": "production",
6
+ /// Mail app API key (smb_mail_...), required only by the mail_send tool.
7
+ "mail_api_key": ""
8
+}
configuration/installation_instructions.md
new
+32
@@ -0,0 +1,32 @@
1
+# smbCloud MCP server
2
+
3
+Gives the agent access to your smbCloud account: mail domains and inbox routes,
4
+auth apps, projects, tenants, and deploys.
5
+
6
+## 1. Sign in
7
+
8
+The server reuses the session that the `smb` CLI stores on disk, so sign in once
9
+from a terminal:
10
+
11
+```sh
12
+npx -y @smbcloud/cli login
13
+```
14
+
15
+Any tool other than `mail_send` works off that session. Nothing else to configure.
16
+
17
+## 2. Optional: a mail API key
18
+
19
+`mail_send` sends real email, so it needs a Mail app API key rather than your
20
+user session. Create one in the smbCloud dashboard and put it in the settings
21
+below as `mail_api_key` — it is passed to the server as `SMB_MAIL_API_KEY`.
22
+
23
+## Settings
24
+
25
+- `scope` — which tool profile to expose. `cloud` (default) serves smbCloud
26
+ resources; `automation` serves the mobile and TV device tools instead.
27
+- `environment` — `production` (default) or `dev`.
28
+- `mail_api_key` — the `smb_mail_...` key described above.
29
+
30
+If you already have `smb` installed natively (Homebrew, cargo, or the install
31
+script), set `command.path` to its location and the extension will use that
32
+binary instead of downloading the npm package.
configuration/settings_schema.json
new
+23
@@ -0,0 +1,23 @@
1
+{
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "additionalProperties": false,
5
+ "properties": {
6
+ "scope": {
7
+ "type": "string",
8
+ "enum": ["cloud", "automation"],
9
+ "default": "cloud",
10
+ "description": "Which tool profile to expose. 'cloud' serves smbCloud resources (mail, auth, projects, deploys); 'automation' serves mobile and TV device tools."
11
+ },
12
+ "environment": {
13
+ "type": "string",
14
+ "enum": ["production", "dev"],
15
+ "default": "production",
16
+ "description": "Which smbCloud API environment to talk to."
17
+ },
18
+ "mail_api_key": {
19
+ "type": "string",
20
+ "description": "Mail app API key (smb_mail_...). Only the mail_send tool needs it; everything else uses the session from `smb login`."
21
+ }
22
+ }
23
+}
extension.toml
+6
-11
@@ -1,15 +1,10 @@
1
-id = "smbcloud-zed-extension"
2
-name = "smbCloud Zed Extension"
3
-description = "Easy deployment with smbCloud Zed Extension."
1
+id = "smbcloud"
2
+name = "smbCloud"
3
version = "0.1.0"
4
schema_version = 1
6
-authors = ["smbCloud <smbcloud@setoelkahfi.se>"]
5
+authors = ["setoelkahfi <1797197+setoelkahfi@users.noreply.github.com>"]
6
+description = "Email infrastructure and authentication for developers: domains, inbox routes, auth apps, deploys."
7
repository = "https://github.com/smbcloudXYZ/smbcloud-zed-extension"
8
9
-[slash_commands.echo]
10
-description = "echoes the provided input"
11
-requires_argument = true
12
-
13
-[slash_commands.pick-one]
14
-description = "pick one of three options"
15
-requires_argument = true
9
+[context_servers.smbcloud]
10
+name = "smbCloud"
src/lib.rs
new
+122
@@ -0,0 +1,122 @@
1
+use {
2
+ serde::Deserialize,
3
+ std::env,
4
+ zed_extension_api::{
5
+ self as zed, serde_json, settings::ContextServerSettings, Command, ContextServerId,
6
+ ContextServerConfiguration, Project, Result,
7
+ },
8
+};
9
+
10
+/// The npm package that ships the `smb` CLI. Running it with `--mcp` turns it
11
+/// into an MCP server over stdio instead of a one-shot command.
12
+const PACKAGE_NAME: &str = "@smbcloud/cli";
13
+const SERVER_PATH: &str = "node_modules/@smbcloud/cli/lib/index.js";
14
+
15
+/// User-facing settings, read from the `settings` object of the
16
+/// `context_servers.smbcloud` entry in Zed's settings.
17
+#[derive(Debug, Default, Deserialize)]
18
+struct SmbcloudSettings {
19
+ /// Tool profile: `cloud` (default) or `automation`.
20
+ scope: Option<String>,
21
+ /// API environment: `production` (default) or `dev`.
22
+ environment: Option<String>,
23
+ /// Mail app API key (`smb_mail_...`), only needed by the `mail_send` tool.
24
+ mail_api_key: Option<String>,
25
+}
26
+
27
+struct SmbcloudExtension;
28
+
29
+impl SmbcloudExtension {
30
+ fn server_args(settings: &SmbcloudSettings) -> Vec<String> {
31
+ let mut args = vec!["--mcp".to_string()];
32
+ if let Some(scope) = &settings.scope {
33
+ args.push("--scope".into());
34
+ args.push(scope.clone());
35
+ }
36
+ if let Some(environment) = &settings.environment {
37
+ args.push("--environment".into());
38
+ args.push(environment.clone());
39
+ }
40
+ args
41
+ }
42
+
43
+ fn server_env(settings: &SmbcloudSettings) -> Vec<(String, String)> {
44
+ settings
45
+ .mail_api_key
46
+ .iter()
47
+ .filter(|key| !key.is_empty())
48
+ .map(|key| ("SMB_MAIL_API_KEY".to_string(), key.clone()))
49
+ .collect()
50
+ }
51
+}
52
+
53
+impl zed::Extension for SmbcloudExtension {
54
+ fn new() -> Self {
55
+ Self
56
+ }
57
+
58
+ fn context_server_command(
59
+ &mut self,
60
+ context_server_id: &ContextServerId,
61
+ project: &Project,
62
+ ) -> Result<Command> {
63
+ let settings = ContextServerSettings::for_project(context_server_id.as_ref(), project)?;
64
+ let options: SmbcloudSettings = settings
65
+ .settings
66
+ .map(serde_json::from_value)
67
+ .transpose()
68
+ .map_err(|err| format!("invalid `settings` for the smbCloud MCP server: {err}"))?
69
+ .unwrap_or_default();
70
+
71
+ let args = Self::server_args(&options);
72
+ let mut env_vars = Self::server_env(&options);
73
+
74
+ // An explicit `command.path` wins: it lets people point at an `smb`
75
+ // installed via Homebrew, cargo, or the install script instead of
76
+ // pulling the npm package.
77
+ if let Some(command) = settings.command {
78
+ if let Some(path) = command.path.filter(|path| !path.is_empty()) {
79
+ env_vars.extend(command.env.into_iter().flatten());
80
+ return Ok(Command {
81
+ command: path,
82
+ args: command.arguments.unwrap_or(args),
83
+ env: env_vars,
84
+ });
85
+ }
86
+ }
87
+
88
+ let latest_version = zed::npm_package_latest_version(PACKAGE_NAME)?;
89
+ if zed::npm_package_installed_version(PACKAGE_NAME)?.as_deref()
90
+ != Some(latest_version.as_str())
91
+ {
92
+ zed::npm_install_package(PACKAGE_NAME, &latest_version)?;
93
+ }
94
+
95
+ // The npm entrypoint is a shim that spawns the platform binary from
96
+ // `optionalDependencies` with inherited stdio, so it speaks MCP fine.
97
+ let server_path = env::current_dir()
98
+ .map(|dir| dir.join(SERVER_PATH).to_string_lossy().into_owned())
99
+ .unwrap_or_else(|_| SERVER_PATH.to_string());
100
+
101
+ Ok(Command {
102
+ command: zed::node_binary_path()?,
103
+ args: std::iter::once(server_path).chain(args).collect(),
104
+ env: env_vars,
105
+ })
106
+ }
107
+
108
+ fn context_server_configuration(
109
+ &mut self,
110
+ _context_server_id: &ContextServerId,
111
+ _project: &Project,
112
+ ) -> Result<Option<ContextServerConfiguration>> {
113
+ Ok(Some(ContextServerConfiguration {
114
+ installation_instructions: include_str!("../configuration/installation_instructions.md")
115
+ .to_string(),
116
+ settings_schema: include_str!("../configuration/settings_schema.json").to_string(),
117
+ default_settings: include_str!("../configuration/default_settings.jsonc").to_string(),
118
+ }))
119
+ }
120
+}
121
+
122
+zed::register_extension!(SmbcloudExtension);
src/smbcloud_zed_extension.rs
deleted
-90
@@ -1,90 +0,0 @@
1
-use zed_extension_api::{
2
- self as zed, SlashCommand, SlashCommandArgumentCompletion, SlashCommandOutput,
3
- SlashCommandOutputSection, Worktree,
4
-};
5
-
6
-struct SmbCloudZedExtension;
7
-
8
-impl zed::Extension for SmbCloudZedExtension {
9
- fn new() -> Self {
10
- SmbCloudZedExtension
11
- }
12
-
13
- fn complete_slash_command_argument(
14
- &self,
15
- command: SlashCommand,
16
- _args: Vec<String>,
17
- ) -> Result<Vec<zed_extension_api::SlashCommandArgumentCompletion>, String> {
18
- match command.name.as_str() {
19
- "echo" => Ok(vec![]),
20
- "pick-one" => Ok(vec![
21
- SlashCommandArgumentCompletion {
22
- label: "Option One".to_string(),
23
- new_text: "option-1".to_string(),
24
- run_command: true,
25
- },
26
- SlashCommandArgumentCompletion {
27
- label: "Option Two".to_string(),
28
- new_text: "option-2".to_string(),
29
- run_command: true,
30
- },
31
- SlashCommandArgumentCompletion {
32
- label: "Option Three".to_string(),
33
- new_text: "option-3".to_string(),
34
- run_command: true,
35
- },
36
- ]),
37
- command => Err(format!("unknown slash command: \"{command}\"")),
38
- }
39
- }
40
-
41
- fn run_slash_command(
42
- &self,
43
- command: SlashCommand,
44
- args: Vec<String>,
45
- _worktree: Option<&Worktree>,
46
- ) -> Result<SlashCommandOutput, String> {
47
- match command.name.as_str() {
48
- "echo" => {
49
- if args.is_empty() {
50
- return Err("nothing to echo".to_string());
51
- }
52
-
53
- let text = args.join(" ");
54
-
55
- Ok(SlashCommandOutput {
56
- sections: vec![SlashCommandOutputSection {
57
- range: (0..text.len()).into(),
58
- label: "Echo".to_string(),
59
- }],
60
- text,
61
- })
62
- }
63
- "pick-one" => {
64
- let Some(selection) = args.first() else {
65
- return Err("no option selected".to_string());
66
- };
67
-
68
- match selection.as_str() {
69
- "option-1" | "option-2" | "option-3" => {}
70
- invalid_option => {
71
- return Err(format!("{invalid_option} is not a valid option"));
72
- }
73
- }
74
-
75
- let text = format!("You chose {selection}.");
76
-
77
- Ok(SlashCommandOutput {
78
- sections: vec![SlashCommandOutputSection {
79
- range: (0..text.len()).into(),
80
- label: format!("Pick One: {selection}"),
81
- }],
82
- text,
83
- })
84
- }
85
- command => Err(format!("unknown slash command: \"{command}\"")),
86
- }
87
- }
88
-}
89
-
90
-zed::register_extension!(SmbCloudZedExtension);