functionalscript 0.36.0 → 0.38.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.
Files changed (523) hide show
  1. package/README.md +1 -1
  2. package/{fs → fjs}/asn.1/module.f.js +1 -1
  3. package/{fs → fjs}/asn.1/proof.f.js +32 -94
  4. package/fjs/asserts/module.f.d.ts +36 -0
  5. package/fjs/asserts/module.f.js +39 -0
  6. package/fjs/asserts/proof.f.d.ts +11 -0
  7. package/fjs/asserts/proof.f.js +18 -0
  8. package/{fs → fjs}/base_n/module.f.js +3 -3
  9. package/{fs → fjs}/base_n/proof.f.js +15 -39
  10. package/{fs → fjs/basen}/base128/module.f.d.ts +1 -1
  11. package/{fs → fjs/basen}/base128/module.f.js +1 -1
  12. package/{fs → fjs/basen}/base128/proof.f.js +3 -3
  13. package/{fs → fjs/basen}/base64/module.f.d.ts +2 -2
  14. package/{fs → fjs/basen}/base64/module.f.js +25 -15
  15. package/{fs → fjs/basen}/base64/proof.f.d.ts +2 -0
  16. package/{fs → fjs/basen}/base64/proof.f.js +26 -6
  17. package/{fs → fjs/basen}/cbase32/module.f.d.ts +2 -2
  18. package/{fs → fjs/basen}/cbase32/module.f.js +2 -2
  19. package/{fs → fjs/basen}/cbase32/proof.f.js +16 -43
  20. package/fjs/bnf/data/module.f.d.ts +52 -0
  21. package/{fs → fjs}/bnf/data/module.f.js +56 -6
  22. package/{fs → fjs}/bnf/data/proof.f.d.ts +1 -0
  23. package/{fs → fjs}/bnf/data/proof.f.js +59 -24
  24. package/{fs → fjs}/bnf/descent/module.f.d.ts +4 -14
  25. package/fjs/bnf/descent/module.f.js +124 -0
  26. package/{fs → fjs}/bnf/descent/proof.f.d.ts +1 -0
  27. package/{fs → fjs}/bnf/descent/proof.f.js +59 -28
  28. package/{fs → fjs}/bnf/ll1/module.f.d.ts +4 -4
  29. package/{fs → fjs}/bnf/ll1/module.f.js +15 -13
  30. package/{fs → fjs}/bnf/ll1/proof.f.d.ts +1 -0
  31. package/{fs → fjs}/bnf/ll1/proof.f.js +33 -16
  32. package/{fs → fjs}/bnf/module.f.d.ts +19 -5
  33. package/{fs → fjs}/bnf/module.f.js +14 -15
  34. package/fjs/bnf/proof.f.js +69 -0
  35. package/{fs → fjs}/bnf/testlib.f.js +2 -2
  36. package/{fs → fjs}/cas/cli/module.f.js +7 -7
  37. package/{fs → fjs}/cas/cli/proof.f.d.ts +4 -1
  38. package/{fs → fjs}/cas/cli/proof.f.js +37 -74
  39. package/fjs/cas/evo/mcp/module.f.d.ts +19 -0
  40. package/fjs/cas/evo/mcp/module.f.js +56 -0
  41. package/fjs/cas/evo/mcp/proof.f.d.ts +9 -0
  42. package/fjs/cas/evo/mcp/proof.f.js +95 -0
  43. package/fjs/cas/evo/module.f.d.ts +138 -0
  44. package/fjs/cas/evo/module.f.js +309 -0
  45. package/fjs/cas/evo/proof.f.d.ts +32 -0
  46. package/fjs/cas/evo/proof.f.js +453 -0
  47. package/fjs/cas/mcp/module.f.d.ts +49 -0
  48. package/fjs/cas/mcp/module.f.js +267 -0
  49. package/{fs → fjs}/cas/mcp/proof.f.d.ts +7 -2
  50. package/{fs → fjs}/cas/mcp/proof.f.js +116 -60
  51. package/{fs → fjs}/cas/module.f.d.ts +10 -0
  52. package/{fs → fjs}/cas/module.f.js +36 -10
  53. package/{fs → fjs}/cas/proof.f.d.ts +8 -2
  54. package/{fs → fjs}/cas/proof.f.js +85 -94
  55. package/{fs → fjs}/ci/bun/module.f.js +2 -2
  56. package/{fs → fjs}/ci/common/module.f.d.ts +2 -2
  57. package/{fs → fjs}/ci/common/module.f.js +4 -4
  58. package/fjs/ci/config/module.f.d.ts +42 -0
  59. package/{fs → fjs}/ci/config/module.f.js +6 -8
  60. package/fjs/ci/deno/module.f.js +20 -0
  61. package/{fs → fjs}/ci/module.f.js +9 -9
  62. package/{fs → fjs}/ci/node/module.f.d.ts +1 -1
  63. package/{fs → fjs}/ci/node/module.f.js +3 -5
  64. package/{fs → fjs}/ci/playwright/module.f.js +3 -3
  65. package/{fs → fjs}/ci/proof.f.js +27 -22
  66. package/{fs → fjs}/ci/rust/module.f.js +11 -3
  67. package/{fs → fjs}/cli/module.f.js +3 -3
  68. package/{fs → fjs}/cli/proof.f.js +25 -66
  69. package/{fs/types → fjs/common}/monoid/module.f.d.ts +1 -1
  70. package/{fs/types → fjs/common}/monoid/proof.f.js +4 -9
  71. package/{fs → fjs}/crypto/hmac/module.f.js +2 -2
  72. package/{fs → fjs}/crypto/hmac/proof.f.js +9 -17
  73. package/{fs → fjs}/crypto/pow/module.f.js +3 -3
  74. package/fjs/crypto/pow/proof.f.js +111 -0
  75. package/{fs → fjs}/crypto/secp/module.f.js +2 -2
  76. package/{fs → fjs}/crypto/secp/proof.f.js +14 -35
  77. package/{fs → fjs}/crypto/sha2/module.f.js +2 -2
  78. package/{fs → fjs}/crypto/sha2/proof.f.js +23 -54
  79. package/{fs → fjs}/crypto/sign/module.f.d.ts +0 -5
  80. package/{fs → fjs}/crypto/sign/module.f.js +11 -8
  81. package/{fs → fjs}/crypto/sign/proof.f.js +36 -105
  82. package/{fs → fjs}/crypto/vdf/module.f.js +1 -1
  83. package/{fs → fjs}/crypto/vdf/proof.f.js +23 -64
  84. package/{fs → fjs}/dev/module.f.js +6 -6
  85. package/{fs → fjs}/dev/package_json/module.f.js +6 -6
  86. package/{fs → fjs}/dev/package_json/proof.f.js +9 -9
  87. package/{fs → fjs}/dev/proof.f.js +3 -5
  88. package/{fs → fjs}/djs/ast/module.f.js +2 -2
  89. package/{fs → fjs}/djs/ast/proof.f.js +8 -16
  90. package/fjs/djs/examples/m.f.d.ts +2 -0
  91. package/{fs → fjs}/djs/module.f.d.ts +1 -1
  92. package/{fs → fjs}/djs/module.f.js +5 -5
  93. package/{fs → fjs}/djs/parser/module.f.d.ts +5 -0
  94. package/{fs → fjs}/djs/parser/module.f.js +24 -4
  95. package/{fs → fjs}/djs/parser/proof.f.js +145 -407
  96. package/{fs → fjs}/djs/proof.f.js +16 -39
  97. package/{fs → fjs}/djs/serializer/module.f.js +6 -6
  98. package/{fs → fjs}/djs/serializer/proof.f.js +18 -43
  99. package/fjs/djs/tokenizer/module.f.d.ts +24 -0
  100. package/fjs/djs/tokenizer/module.f.js +472 -0
  101. package/{fs/djs/tokenizer-new → fjs/djs/tokenizer}/proof.f.d.ts +4 -3
  102. package/{fs/djs/tokenizer-new → fjs/djs/tokenizer}/proof.f.js +447 -446
  103. package/{fs → fjs}/djs/transpiler/module.f.d.ts +5 -0
  104. package/{fs → fjs}/djs/transpiler/module.f.js +21 -11
  105. package/{fs → fjs}/djs/transpiler/proof.f.d.ts +3 -0
  106. package/fjs/djs/transpiler/proof.f.js +67 -0
  107. package/{fs → fjs}/effects/memory/module.f.js +4 -4
  108. package/{fs → fjs}/effects/memory/proof.f.js +11 -24
  109. package/{fs → fjs}/effects/module.f.js +1 -1
  110. package/{fs → fjs}/effects/node/memory/module.js +2 -2
  111. package/{fs → fjs}/effects/node/memory/proof.js +8 -15
  112. package/{fs → fjs}/effects/node/module.d.ts +1 -1
  113. package/{fs → fjs}/effects/node/module.f.d.ts +1 -1
  114. package/{fs → fjs}/effects/node/module.f.js +7 -7
  115. package/{fs → fjs}/effects/node/module.js +13 -13
  116. package/{fs → fjs}/effects/node/proof.f.d.ts +1 -0
  117. package/{fs → fjs}/effects/node/proof.f.js +106 -292
  118. package/{fs → fjs}/effects/node/virtual/module.f.js +7 -7
  119. package/{fs → fjs}/effects/node/virtual/proof.f.d.ts +2 -0
  120. package/{fs → fjs}/effects/node/virtual/proof.f.js +44 -30
  121. package/{fs → fjs}/effects/proof.f.js +18 -47
  122. package/fjs/emergent_testing/all.test.js +4 -0
  123. package/{fs → fjs}/emergent_testing/example.f.d.ts +1 -1
  124. package/{fs → fjs}/emergent_testing/module.f.js +6 -6
  125. package/{fs → fjs}/emergent_testing/proof.f.d.ts +19 -17
  126. package/{fs → fjs}/emergent_testing/proof.f.js +14 -14
  127. package/fjs/emergent_testing/scenarios/all.js +1 -0
  128. package/{fs → fjs}/fsc/bnf.f.js +2 -2
  129. package/{fs → fjs}/fsc/json.f.js +1 -1
  130. package/{fs → fjs}/fsc/module.f.js +7 -7
  131. package/{fs → fjs}/fsc/proof.f.js +16 -38
  132. package/{fs → fjs}/fsm/module.f.js +9 -9
  133. package/{fs → fjs}/fsm/proof.f.js +12 -19
  134. package/{fs → fjs}/js/tokenizer/module.f.js +7 -7
  135. package/{fs → fjs}/js/tokenizer/proof.f.js +5 -5
  136. package/{fs → fjs}/mcp/module.f.d.ts +20 -13
  137. package/{fs → fjs}/mcp/module.f.js +16 -9
  138. package/{fs → fjs}/mcp/proof.f.js +17 -17
  139. package/{fs → fjs}/mcp/stdio/module.f.d.ts +4 -4
  140. package/{fs → fjs}/mcp/stdio/module.f.js +12 -12
  141. package/{fs → fjs}/mcp/stdio/proof.f.js +10 -10
  142. package/{fs → fjs/media}/html/module.f.d.ts +3 -3
  143. package/{fs → fjs/media}/html/module.f.js +9 -9
  144. package/{fs → fjs/media}/html/proof.f.js +12 -33
  145. package/fjs/media/json/module.f.d.ts +50 -0
  146. package/{fs → fjs/media}/json/module.f.js +7 -7
  147. package/{fs → fjs/media}/json/parser/module.f.d.ts +7 -2
  148. package/{fs → fjs/media}/json/parser/module.f.js +21 -7
  149. package/{fs → fjs/media}/json/parser/proof.f.js +45 -120
  150. package/{fs → fjs/media}/json/proof.f.js +4 -4
  151. package/fjs/media/json/rpc/module.f.d.ts +114 -0
  152. package/{fs → fjs/media}/json/rpc/module.f.js +4 -4
  153. package/{fs → fjs/media}/json/rpc/proof.f.js +4 -4
  154. package/fjs/media/json/schema/module.f.d.ts +78 -0
  155. package/{fs → fjs/media}/json/schema/module.f.js +25 -41
  156. package/{fs → fjs/media}/json/schema/proof.f.js +6 -9
  157. package/{fs → fjs/media}/json/serializer/module.f.d.ts +1 -1
  158. package/{fs → fjs/media}/json/serializer/module.f.js +2 -2
  159. package/{fs → fjs/media}/json/serializer/proof.f.js +12 -29
  160. package/{fs → fjs/media}/json/tokenizer/module.f.d.ts +2 -2
  161. package/{fs → fjs/media}/json/tokenizer/module.f.js +4 -4
  162. package/{fs → fjs/media}/json/tokenizer/proof.f.js +5 -5
  163. package/fjs/media/module.f.d.ts +37 -0
  164. package/fjs/media/module.f.js +23 -0
  165. package/fjs/media/proof.f.d.ts +9 -0
  166. package/fjs/media/proof.f.js +58 -0
  167. package/fjs/media/revision/module.f.d.ts +78 -0
  168. package/fjs/media/revision/module.f.js +122 -0
  169. package/fjs/media/revision/proof.f.d.ts +31 -0
  170. package/fjs/media/revision/proof.f.js +140 -0
  171. package/{fs/mime → fjs/media/type}/module.f.d.ts +6 -6
  172. package/{fs/mime → fjs/media/type}/module.f.js +6 -6
  173. package/{fs/mime → fjs/media/type}/proof.f.js +8 -12
  174. package/fjs/module.f.d.ts +2 -0
  175. package/{fs/fjs → fjs}/module.f.js +9 -9
  176. package/fjs/module.js +4 -0
  177. package/{fs → fjs}/path/module.f.js +2 -2
  178. package/{fs → fjs}/path/proof.f.js +27 -78
  179. package/{fs/fjs → fjs}/proof.f.js +6 -4
  180. package/{fs → fjs}/sul/id/module.f.js +9 -9
  181. package/{fs → fjs}/sul/id/proof.f.js +12 -26
  182. package/{fs → fjs}/sul/level/hash/module.f.js +3 -3
  183. package/{fs → fjs}/sul/level/hash/proof.f.js +8 -8
  184. package/{fs → fjs}/sul/level/literal/module.f.js +5 -5
  185. package/{fs → fjs}/sul/level/literal/proof.f.js +15 -29
  186. package/{fs → fjs}/sul/module.f.js +3 -3
  187. package/{fs → fjs}/sul/proof.f.js +3 -3
  188. package/fjs/text/ascii/proof.f.d.ts +6 -0
  189. package/fjs/text/ascii/proof.f.js +14 -0
  190. package/{fs → fjs}/text/code_point/module.f.js +12 -12
  191. package/{fs → fjs}/text/code_point/proof.f.js +1 -1
  192. package/{fs → fjs}/text/module.f.js +5 -5
  193. package/{fs → fjs}/text/proof.f.js +7 -12
  194. package/{fs → fjs}/text/sgr/module.f.js +2 -2
  195. package/{fs → fjs}/text/sgr/proof.f.js +8 -17
  196. package/{fs → fjs}/text/utf16/module.f.js +6 -6
  197. package/{fs → fjs}/text/utf16/proof.f.js +27 -70
  198. package/{fs → fjs}/text/utf8/module.f.js +22 -17
  199. package/{fs → fjs}/text/utf8/proof.f.js +59 -128
  200. package/{fs → fjs}/types/array/module.f.js +1 -1
  201. package/{fs → fjs}/types/array/proof.f.js +21 -55
  202. package/{fs → fjs}/types/bigfloat/module.f.js +1 -1
  203. package/fjs/types/bigfloat/proof.f.js +217 -0
  204. package/{fs → fjs}/types/bigint/module.f.js +2 -2
  205. package/{fs → fjs}/types/bigint/proof.f.js +51 -147
  206. package/{fs → fjs}/types/bit_vec/module.f.js +8 -8
  207. package/{fs → fjs}/types/bit_vec/proof.f.js +76 -218
  208. package/{fs → fjs}/types/btree/find/module.f.js +1 -1
  209. package/fjs/types/btree/find/proof.f.d.ts +3 -0
  210. package/fjs/types/btree/find/proof.f.js +108 -0
  211. package/{fs → fjs}/types/btree/module.f.js +2 -2
  212. package/fjs/types/btree/proof.f.d.ts +13 -0
  213. package/{fs → fjs}/types/btree/proof.f.js +12 -19
  214. package/{fs → fjs}/types/btree/remove/module.f.js +4 -4
  215. package/fjs/types/btree/remove/proof.f.d.ts +9 -0
  216. package/{fs → fjs}/types/btree/remove/proof.f.js +88 -235
  217. package/{fs → fjs}/types/btree/set/module.f.js +8 -5
  218. package/{fs → fjs}/types/btree/set/proof.f.js +39 -28
  219. package/{fs → fjs}/types/byte_set/module.f.js +2 -2
  220. package/fjs/types/byte_set/proof.f.js +79 -0
  221. package/{fs → fjs}/types/function/compare/proof.f.js +14 -37
  222. package/fjs/types/function/operator/proof.f.d.ts +23 -0
  223. package/{fs → fjs}/types/function/operator/proof.f.js +18 -49
  224. package/{fs → fjs}/types/function/proof.f.js +3 -4
  225. package/{fs → fjs}/types/list/module.f.js +2 -2
  226. package/fjs/types/list/proof.f.d.ts +30 -0
  227. package/{fs → fjs}/types/list/proof.f.js +59 -167
  228. package/{fs → fjs}/types/map/proof.f.js +6 -14
  229. package/fjs/types/nibble_set/proof.f.js +60 -0
  230. package/{fs → fjs}/types/nominal/proof.f.js +5 -10
  231. package/{fs → fjs}/types/nullable/module.f.js +2 -2
  232. package/fjs/types/nullable/proof.f.js +29 -0
  233. package/{fs → fjs}/types/number/module.f.js +5 -5
  234. package/{fs → fjs}/types/number/proof.f.js +10 -25
  235. package/{fs → fjs}/types/object/module.f.js +4 -4
  236. package/{fs → fjs}/types/object/proof.f.js +4 -7
  237. package/{fs → fjs}/types/ordered_map/module.f.js +6 -6
  238. package/{fs → fjs}/types/ordered_map/proof.f.js +3 -3
  239. package/fjs/types/patricia_trie/proof.f.d.ts +13 -0
  240. package/{fs → fjs}/types/patricia_trie/proof.f.js +22 -22
  241. package/{fs → fjs}/types/prime_field/module.f.js +3 -8
  242. package/{fs → fjs}/types/prime_field/proof.f.js +2 -2
  243. package/{fs → fjs}/types/range/module.f.d.ts +1 -1
  244. package/fjs/types/range/module.f.js +2 -0
  245. package/fjs/types/range/proof.f.js +9 -0
  246. package/{fs → fjs}/types/range_map/module.f.js +4 -4
  247. package/{fs → fjs}/types/range_map/proof.f.js +35 -88
  248. package/{fs → fjs}/types/result/module.js +1 -1
  249. package/fjs/types/result/proof.f.d.ts +12 -0
  250. package/fjs/types/result/proof.f.js +31 -0
  251. package/{fs → fjs}/types/rtti/common/module.f.d.ts +36 -1
  252. package/{fs → fjs}/types/rtti/common/module.f.js +48 -4
  253. package/fjs/types/rtti/common/proof.f.d.ts +8 -0
  254. package/fjs/types/rtti/common/proof.f.js +51 -0
  255. package/{fs → fjs}/types/rtti/module.f.d.ts +2 -2
  256. package/{fs → fjs}/types/rtti/module.f.js +1 -1
  257. package/{fs → fjs}/types/rtti/parse/module.f.js +16 -25
  258. package/{fs → fjs}/types/rtti/parse/proof.f.js +9 -20
  259. package/{fs → fjs}/types/rtti/ts/module.f.d.ts +10 -4
  260. package/{fs → fjs}/types/rtti/ts/module.f.js +1 -1
  261. package/{fs → fjs}/types/rtti/ts/proof.f.js +2 -2
  262. package/{fs → fjs}/types/rtti/validate/module.f.js +11 -32
  263. package/{fs → fjs}/types/rtti/validate/proof.f.js +6 -11
  264. package/{fs → fjs}/types/sorted_list/module.f.js +3 -3
  265. package/{fs → fjs}/types/sorted_list/proof.f.js +14 -27
  266. package/{fs → fjs}/types/sorted_set/module.f.js +1 -1
  267. package/{fs → fjs}/types/sorted_set/proof.f.js +20 -45
  268. package/{fs → fjs}/types/string/module.f.js +4 -4
  269. package/fjs/types/string/proof.f.js +77 -0
  270. package/{fs → fjs}/types/string_set/module.f.js +6 -6
  271. package/fjs/types/string_set/proof.f.js +43 -0
  272. package/{fs → fjs}/types/ts/proof.f.d.ts +18 -18
  273. package/{fs → fjs}/types/ts/proof.f.js +16 -43
  274. package/{fs → fjs}/types/uint8array/module.f.js +10 -10
  275. package/{fs → fjs}/types/uint8array/proof.f.d.ts +4 -1
  276. package/{fs → fjs}/types/uint8array/proof.f.js +11 -11
  277. package/{fs → fjs}/website/module.f.js +3 -3
  278. package/fjs/website/proof.f.js +13 -0
  279. package/package.json +8 -8
  280. package/fs/asserts/module.f.d.ts +0 -4
  281. package/fs/asserts/module.f.js +0 -9
  282. package/fs/asserts/proof.f.d.ts +0 -8
  283. package/fs/asserts/proof.f.js +0 -51
  284. package/fs/bnf/data/module.f.d.ts +0 -30
  285. package/fs/bnf/descent/module.f.js +0 -119
  286. package/fs/bnf/proof.f.js +0 -104
  287. package/fs/cas/mcp/module.f.d.ts +0 -36
  288. package/fs/cas/mcp/module.f.js +0 -249
  289. package/fs/ci/config/module.f.d.ts +0 -43
  290. package/fs/ci/deno/module.f.js +0 -16
  291. package/fs/crypto/pow/proof.f.js +0 -161
  292. package/fs/djs/examples/m.f.d.ts +0 -2
  293. package/fs/djs/tokenizer/module.f.d.ts +0 -12
  294. package/fs/djs/tokenizer/module.f.js +0 -62
  295. package/fs/djs/tokenizer/proof.f.d.ts +0 -7
  296. package/fs/djs/tokenizer/proof.f.js +0 -543
  297. package/fs/djs/tokenizer-new/module.f.d.ts +0 -3
  298. package/fs/djs/tokenizer-new/module.f.js +0 -155
  299. package/fs/djs/transpiler/proof.f.js +0 -68
  300. package/fs/emergent_testing/all.test.js +0 -4
  301. package/fs/emergent_testing/scenarios/all.js +0 -1
  302. package/fs/fjs/module.f.d.ts +0 -2
  303. package/fs/fjs/module.js +0 -4
  304. package/fs/json/module.f.d.ts +0 -50
  305. package/fs/json/rpc/module.f.d.ts +0 -114
  306. package/fs/json/schema/module.f.d.ts +0 -77
  307. package/fs/text/ascii/proof.f.d.ts +0 -4
  308. package/fs/text/ascii/proof.f.js +0 -24
  309. package/fs/types/bigfloat/proof.f.js +0 -348
  310. package/fs/types/btree/find/proof.f.js +0 -151
  311. package/fs/types/btree/proof.f.d.ts +0 -7
  312. package/fs/types/btree/remove/proof.f.d.ts +0 -4
  313. package/fs/types/byte_set/proof.f.js +0 -120
  314. package/fs/types/function/operator/proof.f.d.ts +0 -12
  315. package/fs/types/list/proof.f.d.ts +0 -22
  316. package/fs/types/nibble_set/proof.f.js +0 -89
  317. package/fs/types/nullable/proof.f.js +0 -50
  318. package/fs/types/patricia_trie/proof.f.d.ts +0 -7
  319. package/fs/types/range/module.f.js +0 -2
  320. package/fs/types/range/proof.f.d.ts +0 -1
  321. package/fs/types/range/proof.f.js +0 -18
  322. package/fs/types/result/proof.f.d.ts +0 -6
  323. package/fs/types/result/proof.f.js +0 -52
  324. package/fs/types/string/proof.f.js +0 -118
  325. package/fs/types/string_set/proof.f.js +0 -82
  326. package/fs/website/proof.f.js +0 -16
  327. /package/{fs → fjs}/asn.1/module.f.d.ts +0 -0
  328. /package/{fs → fjs}/asn.1/proof.f.d.ts +0 -0
  329. /package/{fs → fjs}/base_n/module.f.d.ts +0 -0
  330. /package/{fs → fjs}/base_n/proof.f.d.ts +0 -0
  331. /package/{fs → fjs/basen}/base128/proof.f.d.ts +0 -0
  332. /package/{fs → fjs/basen}/cbase32/proof.f.d.ts +0 -0
  333. /package/{fs → fjs}/bnf/proof.f.d.ts +0 -0
  334. /package/{fs → fjs}/bnf/testlib.f.d.ts +0 -0
  335. /package/{fs → fjs}/cas/cli/module.f.d.ts +0 -0
  336. /package/{fs → fjs}/ci/bun/module.f.d.ts +0 -0
  337. /package/{fs → fjs}/ci/deno/module.f.d.ts +0 -0
  338. /package/{fs → fjs}/ci/module.f.d.ts +0 -0
  339. /package/{fs → fjs}/ci/playwright/module.f.d.ts +0 -0
  340. /package/{fs → fjs}/ci/proof.f.d.ts +0 -0
  341. /package/{fs → fjs}/ci/rust/module.f.d.ts +0 -0
  342. /package/{fs → fjs}/cli/module.f.d.ts +0 -0
  343. /package/{fs → fjs}/cli/proof.f.d.ts +0 -0
  344. /package/{fs/types → fjs/common}/monoid/module.f.js +0 -0
  345. /package/{fs/types → fjs/common}/monoid/proof.f.d.ts +0 -0
  346. /package/{fs → fjs}/crypto/hmac/module.f.d.ts +0 -0
  347. /package/{fs → fjs}/crypto/hmac/proof.f.d.ts +0 -0
  348. /package/{fs → fjs}/crypto/pow/module.f.d.ts +0 -0
  349. /package/{fs → fjs}/crypto/pow/proof.f.d.ts +0 -0
  350. /package/{fs → fjs}/crypto/secp/module.f.d.ts +0 -0
  351. /package/{fs → fjs}/crypto/secp/proof.f.d.ts +0 -0
  352. /package/{fs → fjs}/crypto/sha2/module.f.d.ts +0 -0
  353. /package/{fs → fjs}/crypto/sha2/proof.f.d.ts +0 -0
  354. /package/{fs → fjs}/crypto/sign/proof.f.d.ts +0 -0
  355. /package/{fs → fjs}/crypto/vdf/module.f.d.ts +0 -0
  356. /package/{fs → fjs}/crypto/vdf/proof.f.d.ts +0 -0
  357. /package/{fs → fjs}/dev/module.f.d.ts +0 -0
  358. /package/{fs → fjs}/dev/package_json/module.f.d.ts +0 -0
  359. /package/{fs → fjs}/dev/package_json/proof.f.d.ts +0 -0
  360. /package/{fs → fjs}/dev/proof.f.d.ts +0 -0
  361. /package/{fs → fjs}/djs/ast/module.f.d.ts +0 -0
  362. /package/{fs → fjs}/djs/ast/proof.f.d.ts +0 -0
  363. /package/{fs → fjs}/djs/examples/input.f.d.ts +0 -0
  364. /package/{fs → fjs}/djs/examples/input.f.js +0 -0
  365. /package/{fs → fjs}/djs/examples/m.f.js +0 -0
  366. /package/{fs → fjs}/djs/parser/proof.f.d.ts +0 -0
  367. /package/{fs → fjs}/djs/proof.f.d.ts +0 -0
  368. /package/{fs → fjs}/djs/serializer/module.f.d.ts +0 -0
  369. /package/{fs → fjs}/djs/serializer/proof.f.d.ts +0 -0
  370. /package/{fs → fjs}/effects/list/module.f.d.ts +0 -0
  371. /package/{fs → fjs}/effects/list/module.f.js +0 -0
  372. /package/{fs → fjs}/effects/memory/module.f.d.ts +0 -0
  373. /package/{fs → fjs}/effects/memory/proof.f.d.ts +0 -0
  374. /package/{fs → fjs}/effects/mock/module.f.d.ts +0 -0
  375. /package/{fs → fjs}/effects/mock/module.f.js +0 -0
  376. /package/{fs → fjs}/effects/module.d.ts +0 -0
  377. /package/{fs → fjs}/effects/module.f.d.ts +0 -0
  378. /package/{fs → fjs}/effects/module.js +0 -0
  379. /package/{fs → fjs}/effects/node/memory/module.d.ts +0 -0
  380. /package/{fs → fjs}/effects/node/memory/proof.d.ts +0 -0
  381. /package/{fs → fjs}/effects/node/virtual/module.f.d.ts +0 -0
  382. /package/{fs → fjs}/effects/proof.f.d.ts +0 -0
  383. /package/{fs → fjs}/emergent_testing/all.test.d.ts +0 -0
  384. /package/{fs → fjs}/emergent_testing/example.f.js +0 -0
  385. /package/{fs → fjs}/emergent_testing/module.f.d.ts +0 -0
  386. /package/{fs → fjs}/emergent_testing/scenarios/all.d.ts +0 -0
  387. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.fail.d.ts +0 -0
  388. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.fail.js +0 -0
  389. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.pass.d.ts +0 -0
  390. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.pass.js +0 -0
  391. /package/{fs → fjs}/emergent_testing/scenarios/async.fail.d.ts +0 -0
  392. /package/{fs → fjs}/emergent_testing/scenarios/async.fail.js +0 -0
  393. /package/{fs → fjs}/emergent_testing/scenarios/async.pass.d.ts +0 -0
  394. /package/{fs → fjs}/emergent_testing/scenarios/async.pass.js +0 -0
  395. /package/{fs → fjs}/emergent_testing/scenarios/fail.fail.d.ts +0 -0
  396. /package/{fs → fjs}/emergent_testing/scenarios/fail.fail.js +0 -0
  397. /package/{fs → fjs}/emergent_testing/scenarios/return-value.pass.d.ts +0 -0
  398. /package/{fs → fjs}/emergent_testing/scenarios/return-value.pass.js +0 -0
  399. /package/{fs → fjs}/emergent_testing/scenarios/thenable.pass.d.ts +0 -0
  400. /package/{fs → fjs}/emergent_testing/scenarios/thenable.pass.js +0 -0
  401. /package/{fs → fjs}/emergent_testing/scenarios/thenable2.pass.d.ts +0 -0
  402. /package/{fs → fjs}/emergent_testing/scenarios/thenable2.pass.js +0 -0
  403. /package/{fs → fjs}/emergent_testing/scenarios/throw.pass.d.ts +0 -0
  404. /package/{fs → fjs}/emergent_testing/scenarios/throw.pass.js +0 -0
  405. /package/{fs → fjs}/fsc/bnf.f.d.ts +0 -0
  406. /package/{fs → fjs}/fsc/json.f.d.ts +0 -0
  407. /package/{fs → fjs}/fsc/module.f.d.ts +0 -0
  408. /package/{fs → fjs}/fsc/proof.f.d.ts +0 -0
  409. /package/{fs → fjs}/fsm/module.f.d.ts +0 -0
  410. /package/{fs → fjs}/fsm/proof.f.d.ts +0 -0
  411. /package/{fs → fjs}/js/tokenizer/module.f.d.ts +0 -0
  412. /package/{fs → fjs}/js/tokenizer/proof.f.d.ts +0 -0
  413. /package/{fs → fjs}/mcp/proof.f.d.ts +0 -0
  414. /package/{fs → fjs}/mcp/stdio/proof.f.d.ts +0 -0
  415. /package/{fs → fjs/media}/html/proof.f.d.ts +0 -0
  416. /package/{fs → fjs/media}/json/parser/proof.f.d.ts +0 -0
  417. /package/{fs → fjs/media}/json/proof.f.d.ts +0 -0
  418. /package/{fs → fjs/media}/json/rpc/proof.f.d.ts +0 -0
  419. /package/{fs → fjs/media}/json/schema/proof.f.d.ts +0 -0
  420. /package/{fs → fjs/media}/json/serializer/proof.f.d.ts +0 -0
  421. /package/{fs → fjs/media}/json/tokenizer/proof.f.d.ts +0 -0
  422. /package/{fs/mime → fjs/media/type}/proof.f.d.ts +0 -0
  423. /package/{fs/fjs → fjs}/module.d.ts +0 -0
  424. /package/{fs → fjs}/path/module.f.d.ts +0 -0
  425. /package/{fs → fjs}/path/proof.f.d.ts +0 -0
  426. /package/{fs/fjs → fjs}/proof.f.d.ts +0 -0
  427. /package/{fs → fjs}/sul/id/module.f.d.ts +0 -0
  428. /package/{fs → fjs}/sul/id/proof.f.d.ts +0 -0
  429. /package/{fs → fjs}/sul/level/hash/module.f.d.ts +0 -0
  430. /package/{fs → fjs}/sul/level/hash/proof.f.d.ts +0 -0
  431. /package/{fs → fjs}/sul/level/literal/module.f.d.ts +0 -0
  432. /package/{fs → fjs}/sul/level/literal/proof.f.d.ts +0 -0
  433. /package/{fs → fjs}/sul/module.f.d.ts +0 -0
  434. /package/{fs → fjs}/sul/proof.f.d.ts +0 -0
  435. /package/{fs → fjs}/text/ascii/module.f.d.ts +0 -0
  436. /package/{fs → fjs}/text/ascii/module.f.js +0 -0
  437. /package/{fs → fjs}/text/code_point/module.f.d.ts +0 -0
  438. /package/{fs → fjs}/text/code_point/proof.f.d.ts +0 -0
  439. /package/{fs → fjs}/text/module.f.d.ts +0 -0
  440. /package/{fs → fjs}/text/proof.f.d.ts +0 -0
  441. /package/{fs → fjs}/text/sgr/module.f.d.ts +0 -0
  442. /package/{fs → fjs}/text/sgr/proof.f.d.ts +0 -0
  443. /package/{fs → fjs}/text/utf16/module.f.d.ts +0 -0
  444. /package/{fs → fjs}/text/utf16/proof.f.d.ts +0 -0
  445. /package/{fs → fjs}/text/utf8/module.f.d.ts +0 -0
  446. /package/{fs → fjs}/text/utf8/proof.f.d.ts +0 -0
  447. /package/{fs → fjs}/types/array/module.f.d.ts +0 -0
  448. /package/{fs → fjs}/types/array/proof.f.d.ts +0 -0
  449. /package/{fs → fjs}/types/bigfloat/module.f.d.ts +0 -0
  450. /package/{fs → fjs}/types/bigfloat/proof.f.d.ts +0 -0
  451. /package/{fs → fjs}/types/bigint/module.f.d.ts +0 -0
  452. /package/{fs → fjs}/types/bigint/proof.f.d.ts +0 -0
  453. /package/{fs → fjs}/types/bit_vec/module.f.d.ts +0 -0
  454. /package/{fs → fjs}/types/bit_vec/proof.f.d.ts +0 -0
  455. /package/{fs → fjs}/types/btree/find/module.f.d.ts +0 -0
  456. /package/{fs → fjs}/types/btree/module.f.d.ts +0 -0
  457. /package/{fs → fjs}/types/btree/remove/module.f.d.ts +0 -0
  458. /package/{fs → fjs}/types/btree/set/module.f.d.ts +0 -0
  459. /package/{fs → fjs}/types/btree/set/proof.f.d.ts +0 -0
  460. /package/{fs → fjs}/types/btree/types/module.f.d.ts +0 -0
  461. /package/{fs → fjs}/types/btree/types/module.f.js +0 -0
  462. /package/{fs → fjs}/types/byte_set/module.f.d.ts +0 -0
  463. /package/{fs → fjs}/types/byte_set/proof.f.d.ts +0 -0
  464. /package/{fs → fjs}/types/function/compare/module.f.d.ts +0 -0
  465. /package/{fs → fjs}/types/function/compare/module.f.js +0 -0
  466. /package/{fs/types/btree/find → fjs/types/function/compare}/proof.f.d.ts +0 -0
  467. /package/{fs → fjs}/types/function/module.f.d.ts +0 -0
  468. /package/{fs → fjs}/types/function/module.f.js +0 -0
  469. /package/{fs → fjs}/types/function/operator/module.f.d.ts +0 -0
  470. /package/{fs → fjs}/types/function/operator/module.f.js +0 -0
  471. /package/{fs/types/function/compare → fjs/types/function}/proof.f.d.ts +0 -0
  472. /package/{fs → fjs}/types/list/module.f.d.ts +0 -0
  473. /package/{fs → fjs}/types/map/module.f.d.ts +0 -0
  474. /package/{fs → fjs}/types/map/module.f.js +0 -0
  475. /package/{fs → fjs}/types/map/proof.f.d.ts +0 -0
  476. /package/{fs → fjs}/types/nibble_set/module.f.d.ts +0 -0
  477. /package/{fs → fjs}/types/nibble_set/module.f.js +0 -0
  478. /package/{fs → fjs}/types/nibble_set/proof.f.d.ts +0 -0
  479. /package/{fs → fjs}/types/nominal/module.f.d.ts +0 -0
  480. /package/{fs → fjs}/types/nominal/module.f.js +0 -0
  481. /package/{fs → fjs}/types/nominal/proof.f.d.ts +0 -0
  482. /package/{fs → fjs}/types/nullable/module.f.d.ts +0 -0
  483. /package/{fs → fjs}/types/nullable/proof.f.d.ts +0 -0
  484. /package/{fs → fjs}/types/number/module.f.d.ts +0 -0
  485. /package/{fs → fjs}/types/number/proof.f.d.ts +0 -0
  486. /package/{fs → fjs}/types/object/module.f.d.ts +0 -0
  487. /package/{fs → fjs}/types/object/proof.f.d.ts +0 -0
  488. /package/{fs → fjs}/types/option/module.f.d.ts +0 -0
  489. /package/{fs → fjs}/types/option/module.f.js +0 -0
  490. /package/{fs → fjs}/types/ordered_map/module.f.d.ts +0 -0
  491. /package/{fs → fjs}/types/ordered_map/proof.f.d.ts +0 -0
  492. /package/{fs → fjs}/types/patricia_trie/module.f.d.ts +0 -0
  493. /package/{fs → fjs}/types/patricia_trie/module.f.js +0 -0
  494. /package/{fs → fjs}/types/phantom/module.f.d.ts +0 -0
  495. /package/{fs → fjs}/types/phantom/module.f.js +0 -0
  496. /package/{fs → fjs}/types/prime_field/module.f.d.ts +0 -0
  497. /package/{fs → fjs}/types/prime_field/proof.f.d.ts +0 -0
  498. /package/{fs/types/function → fjs/types/range}/proof.f.d.ts +0 -0
  499. /package/{fs → fjs}/types/range_map/module.f.d.ts +0 -0
  500. /package/{fs → fjs}/types/range_map/proof.f.d.ts +0 -0
  501. /package/{fs → fjs}/types/result/module.d.ts +0 -0
  502. /package/{fs → fjs}/types/result/module.f.d.ts +0 -0
  503. /package/{fs → fjs}/types/result/module.f.js +0 -0
  504. /package/{fs → fjs}/types/rtti/parse/module.f.d.ts +0 -0
  505. /package/{fs → fjs}/types/rtti/parse/proof.f.d.ts +0 -0
  506. /package/{fs → fjs}/types/rtti/proof.f.d.ts +0 -0
  507. /package/{fs → fjs}/types/rtti/proof.f.js +0 -0
  508. /package/{fs → fjs}/types/rtti/ts/proof.f.d.ts +0 -0
  509. /package/{fs → fjs}/types/rtti/validate/module.f.d.ts +0 -0
  510. /package/{fs → fjs}/types/rtti/validate/proof.f.d.ts +0 -0
  511. /package/{fs → fjs}/types/sorted_list/module.f.d.ts +0 -0
  512. /package/{fs → fjs}/types/sorted_list/proof.f.d.ts +0 -0
  513. /package/{fs → fjs}/types/sorted_set/module.f.d.ts +0 -0
  514. /package/{fs → fjs}/types/sorted_set/proof.f.d.ts +0 -0
  515. /package/{fs → fjs}/types/string/module.f.d.ts +0 -0
  516. /package/{fs → fjs}/types/string/proof.f.d.ts +0 -0
  517. /package/{fs → fjs}/types/string_set/module.f.d.ts +0 -0
  518. /package/{fs → fjs}/types/string_set/proof.f.d.ts +0 -0
  519. /package/{fs → fjs}/types/ts/module.f.d.ts +0 -0
  520. /package/{fs → fjs}/types/ts/module.f.js +0 -0
  521. /package/{fs → fjs}/types/uint8array/module.f.d.ts +0 -0
  522. /package/{fs → fjs}/website/module.f.d.ts +0 -0
  523. /package/{fs → fjs}/website/proof.f.d.ts +0 -0
package/fs/bnf/proof.f.js DELETED
@@ -1,104 +0,0 @@
1
- import { classic, deterministic } from "./testlib.f.js";
2
- import { rangeEncode, str, set, range, commaJoin0Plus, isEmpty, oneEncode, repeat1Plus, } from "./module.f.js";
3
- export const proof = {
4
- test: () => {
5
- classic();
6
- deterministic();
7
- },
8
- throw: {
9
- rangeEncodeInvalid: [
10
- () => { rangeEncode(-1, 0); },
11
- () => { rangeEncode(0, -1); },
12
- () => { rangeEncode(5, 3); },
13
- ],
14
- rangeInvalid: [
15
- () => { range('a'); },
16
- () => { range('abc'); },
17
- ],
18
- },
19
- str: [
20
- () => {
21
- const result = str('a');
22
- if (typeof result !== 'number') {
23
- throw result;
24
- }
25
- if (result !== oneEncode(0x61)) {
26
- throw result;
27
- }
28
- },
29
- () => {
30
- const result = str('ab');
31
- if (!Array.isArray(result)) {
32
- throw result;
33
- }
34
- if (result.length !== 2) {
35
- throw result;
36
- }
37
- },
38
- ],
39
- set: () => {
40
- const result = set('abc');
41
- if (typeof result !== 'object' || result === null) {
42
- throw result;
43
- }
44
- if (!('a' in result)) {
45
- throw result;
46
- }
47
- if (!('b' in result)) {
48
- throw result;
49
- }
50
- if (!('c' in result)) {
51
- throw result;
52
- }
53
- },
54
- commaJoin0Plus: () => {
55
- const ws = '';
56
- const item = 'x';
57
- const result = commaJoin0Plus(ws)('[]', item);
58
- if (!Array.isArray(result)) {
59
- throw result;
60
- }
61
- if (result[0] !== '[') {
62
- throw result;
63
- }
64
- },
65
- isEmpty: [
66
- () => { if (!isEmpty('')) {
67
- throw 'empty string should be empty';
68
- } },
69
- () => { if (!isEmpty([])) {
70
- throw 'empty array should be empty';
71
- } },
72
- () => { if (isEmpty('a')) {
73
- throw 'non-empty string should not be empty';
74
- } },
75
- () => {
76
- const f = () => '';
77
- if (!isEmpty(f)) {
78
- throw 'function returning empty string should be empty';
79
- }
80
- },
81
- ],
82
- repeat1Plus: [
83
- () => {
84
- const result = repeat1Plus('x');
85
- if (result[0] !== 'x') {
86
- throw result[0];
87
- }
88
- if (typeof result[1] !== 'function') {
89
- throw 'expected repeat0Plus function';
90
- }
91
- },
92
- () => {
93
- const rule = 'ab';
94
- const result = repeat1Plus(rule);
95
- if (result[0] !== rule) {
96
- throw result[0];
97
- }
98
- const inner = result[1]();
99
- if (!('some' in inner) || !('none' in inner)) {
100
- throw 'expected Option shape';
101
- }
102
- },
103
- ],
104
- };
@@ -1,36 +0,0 @@
1
- import { type Effect } from '../../effects/module.f.ts';
2
- import { type MemOp } from '../../effects/memory/module.f.ts';
3
- import { type Read, type Write } from '../../effects/node/module.f.ts';
4
- import { type McpConfig, type McpHandlers } from '../../mcp/module.f.ts';
5
- import { type FileCasOperation } from '../module.f.ts';
6
- /** Arguments for `cas_add`: content to store, with optional encoding type. */
7
- export declare const casAddArgs: {
8
- readonly content: import("../../types/rtti/module.f.ts").String;
9
- readonly type: import("../../types/rtti/module.f.ts").Or<["text", "base64", undefined]>;
10
- };
11
- /** Arguments for `cas_get`: the cBase32 hash to look up; optionally request inline content. */
12
- export declare const casGetArgs: {
13
- readonly hash: import("../../types/rtti/module.f.ts").String;
14
- readonly content: import("../../types/rtti/module.f.ts").Or<readonly [import("../../types/rtti/module.f.ts").Boolean, undefined]>;
15
- };
16
- /** Arguments for `cas_list`: none. */
17
- export declare const casListArgs: {};
18
- /**
19
- * MCP handlers for `FileCas`.
20
- */
21
- export declare const casMcpHandlers: (home: string) => McpHandlers<FileCasOperation>;
22
- /**
23
- * Static MCP configuration for the CAS server: advertises the `tools`
24
- * capability, identifies the server, and pins the protocol version.
25
- */
26
- export declare const casConfig: McpConfig;
27
- /**
28
- * Runs the file CAS MCP server over stdio: allocates the session-state slot, builds
29
- * the `mcpStep` for `c`, and drives the read → parse → dispatch → write loop
30
- * until stdin EOF.
31
- */
32
- export declare const casMcpServer: (home: string) => Effect<Read | Write | MemOp | FileCasOperation, void>;
33
- export declare const proof: {
34
- casMcpServer: () => void;
35
- collectReadOverflow: () => void;
36
- };
@@ -1,249 +0,0 @@
1
- /**
2
- * MCP adapter for the content-addressable store.
3
- *
4
- * Maps `Cas<O>` operations onto MCP tools, so an agent that speaks MCP can
5
- * store a blob and get back its hash, fetch a blob by hash, and enumerate
6
- * what is stored — without shelling out to the `cas` CLI. The store itself
7
- * (`fs/cas/module.f.ts`) stays transport-agnostic; this is an additional
8
- * front end alongside the CLI `main`.
9
- *
10
- * ## Tools
11
- *
12
- * | Tool | args | action | result |
13
- * |------------|-------------------------------|------------------|-------------------------------------|
14
- * | `cas_add` | `{ content, type? }` | `c.write(...)` | hash (cBase32) |
15
- * | `cas_get` | `{ hash, content?: boolean }` | `c.read(key)` | JSON `{length,mime_type,type[,content]}` |
16
- * | `cas_list` | `{}` | `c.list()` | hashes, one per line |
17
- *
18
- * ## `cas_add` input encoding
19
- *
20
- * The optional `type` field controls how `content` is interpreted:
21
- * - `'text'` (default, or omitted): `content` is a UTF-8 string stored as raw
22
- * bytes. Most agent-generated content (scripts, JSON, prompts) can be stored
23
- * without any encoding step.
24
- * - `'base64'`: `content` is RFC 4648 base64, decoded to bytes before storage.
25
- * Use this for pre-encoded binary payloads.
26
- *
27
- * Inline content (either encoding) is capped at 128 KiB (`maxLength`). There is
28
- * no MCP route for larger content — the server never opens a local path named by
29
- * the client (see the invariant in `fs/cas/mcp/README.md`); large files go
30
- * through the `cas` CLI (`cas add <path>`) instead, run directly by the user.
31
- *
32
- * ## `cas_get` output
33
- *
34
- * Always returns a JSON object `{ length, mime_type, type[, url][, content] }`.
35
- * `type` is always present (`'text'` or `'base64'`). A single classifier — the
36
- * `fs/mime` detector state machine (length × magic-byte eliminator × UTF-8 DFA) —
37
- * produces the same three-way verdict on both paths, so there is no second,
38
- * divergent copy of the rules:
39
- *
40
- * 1. **Magic-byte hit** (PNG/JPEG/GIF/WebP/PDF/ZIP) → `type: 'base64'` with the
41
- * detected `mime_type`.
42
- * 2. **Whole-blob-valid UTF-8** → `type: 'text'`, `mime_type: 'text/plain'`.
43
- * 3. **Fallback** → `type: 'base64'`, `mime_type: 'application/octet-stream'`.
44
- *
45
- * **Metadata-only (`content: false`, the default) is size-independent.** It folds
46
- * the read stream through `fs/mime` `detectStream` and never buffers the blob.
47
- * Because a single `Vec` caps at `maxLength` bits (128 KiB), the old
48
- * drain-into-one-`Vec` approach failed on any blob larger than one chunk even when
49
- * only metadata was asked for; streaming detection returns correct
50
- * `{ length, mime_type, type[, url] }` regardless of size.
51
- *
52
- * **`content: true`** first derives `{ length, mime_type, type }` with the same
53
- * size-independent `fs/mime` `detectStream` machine, then materializes the bytes
54
- * (via `collectRead`, bounded by `maxLength`) and encodes the inline payload by
55
- * `type` — a `fs/text/utf8` `fromVec` string for `text`, base64 for `base64`. A
56
- * blob larger than `maxLength` (128 KiB) cannot be buffered into one `Vec`, so it
57
- * is rejected here with a descriptive *"too large"* error (carrying the byte size
58
- * and `url`) rather than being misreported as absent; it should be fetched via
59
- * `url` or inspected with metadata-only `cas_get`.
60
- *
61
- * ## Encoding split: hashes vs. content
62
- *
63
- * `Cas<O>` deals in `Vec` (bit vectors); MCP models only `textContent` today.
64
- * **Hashes** travel as cBase32 (`fs/cbase32`) — the canonical CAS hash format,
65
- * shared with the CLI and the on-disk store layout. **Content** encoding is
66
- * determined at read time as described above.
67
- *
68
- * ## Error convention
69
- *
70
- * MCP draws a line the dispatcher already respects: *protocol* failures
71
- * (unknown method, malformed JSON-RPC params) are JSON-RPC errors handled by
72
- * `mcpStep`. *Tool* failures come back as a normal `tools/call` result with
73
- * `isError: true` and a text explanation, so the model can read and react:
74
- * - `type: 'base64'` with malformed content (base64 `decode` → `null`) → `isError`
75
- * - malformed `hash` (`cBase32ToVec` → `null`) → `isError`
76
- * - `cas_get` on an absent hash (`c.read` → `undefined`) → `isError`
77
- * - `cas_get` with `content: true` on a blob larger than `maxLength` → `isError`
78
- * (distinct "too large" message, not "no such hash")
79
- * - unknown tool `name` → `isError`
80
- *
81
- * @module
82
- */
83
- import { string, option, or, boolean } from "../../types/rtti/module.f.js";
84
- import { stringify } from "../../json/module.f.js";
85
- import { pure, decode } from "../../effects/module.f.js";
86
- import { create } from "../../effects/memory/module.f.js";
87
- import { cBase32ToVec, vecToCBase32 } from "../../cbase32/module.f.js";
88
- import { decode as base64Decode, encode as base64Encode } from "../../base64/module.f.js";
89
- import { tryUtf8 } from "../../text/module.f.js";
90
- import { detectStream } from "../../mime/module.f.js";
91
- import { empty, length as bitVecLength, maxLength, maxLengthBytes, msb, vec } from "../../types/bit_vec/module.f.js";
92
- import { ok, error } from "../../types/result/module.f.js";
93
- import {} from "../../effects/node/module.f.js";
94
- import { stdioTransport } from "../../mcp/stdio/module.f.js";
95
- import { mcpStep, uninitializedState, toolEntry, fromRegistry, errorResult, } from "../../mcp/module.f.js";
96
- import { fileCas } from "../module.f.js";
97
- import { fromVec } from "../../text/utf8/module.f.js";
98
- import { identity } from "../../types/function/module.f.js";
99
- import { sha256 } from "../../crypto/sha2/module.f.js";
100
- import { nonEmpty, empty as elEmpty } from "../../effects/list/module.f.js";
101
- // ── Argument schemas (declared once, used for both inputSchema and validate) ─────
102
- /** Arguments for `cas_add`: content to store, with optional encoding type. */
103
- export const casAddArgs = {
104
- content: string,
105
- type: or('text', 'base64', undefined)
106
- };
107
- /** Arguments for `cas_get`: the cBase32 hash to look up; optionally request inline content. */
108
- export const casGetArgs = {
109
- hash: string,
110
- content: option(boolean)
111
- };
112
- /** Arguments for `cas_list`: none. */
113
- export const casListArgs = {};
114
- // ── Stream helper ────────────────────────────────────────────────────────────────
115
- /**
116
- * Drains a CAS read stream into a single `Vec`. Used only on the `content: true`
117
- * path, where the whole blob is needed for inline base64 / UTF-8 transfer; the
118
- * chunk stream is concatenated and an error item is surfaced as the result.
119
- * Metadata-only `cas_get` avoids this entirely via `fs/mime` `detectStream`,
120
- * which is why it is not bound by the `maxLength` ceiling below.
121
- */
122
- const collectRead = (stream) => {
123
- const loop = (acc) => (s) => s.step((node) => {
124
- if (node === undefined) {
125
- return pure(ok(acc));
126
- }
127
- const { first, tail } = node;
128
- const [t, v] = first;
129
- if (t === 'error') {
130
- return pure(first);
131
- }
132
- // A single `Vec` cannot exceed `maxLength` bits; concatenating past it would
133
- // overflow the runtime's `bigint` constraint. Surface that as an error item
134
- // so the tool reports a failure rather than crashing the process.
135
- if (bitVecLength(acc) + bitVecLength(v) > maxLength) {
136
- return pure(error(`cas blob exceeds maximum vector length of ${maxLength} bits`));
137
- }
138
- return loop(msb.concat(acc)(v))(tail);
139
- });
140
- return loop(empty)(stream);
141
- };
142
- // ── Tool registry ──────────────────────────────────────────────────────────────
143
- const toJson = stringify(identity);
144
- /** Registry of all CAS tools. */
145
- const casToolRegistry = (home) => {
146
- const c = fileCas(sha256)(home);
147
- return [
148
- toolEntry('cas_add', 'Store content and return its hash (cBase32). Pass type:"base64" for binary; omit or pass type:"text" for UTF-8 text (default). Inline content is capped at 128 KiB (131072 bytes) — larger content is rejected. For larger content, store the file with the `cas` CLI instead: run `npx functionalscript cas add <path>` yourself if you have shell access, or give the user that exact command to run — it prints the resulting hash on stdout.', casAddArgs, ({ type, content }) => {
149
- // type:'text' or 'base64' — resolve content to Vec, store via c.write()
150
- let x = type === 'base64'
151
- ? base64Decode(content)
152
- : tryUtf8(content);
153
- return x === null
154
- ? pure(errorResult('too large or malformed — for large content, run `npx functionalscript cas add <path>` (or have the user run it) instead'))
155
- // The resolved content fits in one chunk; feed it as a single-item stream.
156
- : c.write(nonEmpty(ok(x), elEmpty())).step(([tag, hash]) => pure(tag === 'error'
157
- ? errorResult('write')
158
- : okResult(vecToCBase32(hash))));
159
- }),
160
- toolEntry('cas_get', 'Inspect a blob by hash. Always returns JSON {length,mime_type,type[,url]} where type is "text" or "base64". Pass content:true to also include the inline content string, but content is capped at 128 KiB (131072 bytes) — a larger blob is rejected with an error. To download a blob, prefer the url field returned in the result instead of requesting inline content.', casGetArgs, r => {
161
- const key = cBase32ToVec(r.hash);
162
- if (key === null) {
163
- return pure(errorResult(`invalid cBase32 hash: ${r.hash}`));
164
- }
165
- const url = c.url(key);
166
- return detectStream(c.read(key)).step(([tag, detected]) => {
167
- if (tag === 'error') {
168
- return pure(errorResult(`no such hash: ${r.hash}`));
169
- }
170
- const { length, mime_type, type } = detected;
171
- const meta = { length: Number(length), mime_type, type, url };
172
- if (r.content !== true) {
173
- // content:true path continues below; this is just the metadata step.
174
- return pure(okResult(toJson(meta)));
175
- }
176
- // A single `Vec` caps at `maxLength` bits (`maxLengthBytes` bytes), so
177
- // a larger blob cannot be buffered for inline transfer. Report the
178
- // size and point at the size-independent alternatives instead of
179
- // misreporting an existing blob as `no such hash`.
180
- if (length > maxLengthBytes) {
181
- return pure(errorResult(`blob too large to fetch inline (${length} bytes, limit ${maxLengthBytes} bytes); use the url field (${url}) or omit content for metadata`));
182
- }
183
- return collectRead(c.read(key)).step(([collectTag, value]) => {
184
- if (collectTag === 'error') {
185
- return pure(errorResult(`no such hash: ${r.hash}`));
186
- }
187
- if (type === 'text') {
188
- // `type: 'text'` means the detector validated `value` as UTF-8,
189
- // so `fromVec` is non-null here; guard defensively regardless.
190
- const str = fromVec(value);
191
- return pure(str === null
192
- ? errorResult(`content is not byte-aligned: ${r.hash}`)
193
- : okResult(toJson({ ...meta, content: str })));
194
- }
195
- const blob = base64Encode(value);
196
- return pure(blob === null
197
- ? errorResult(`content is not byte-aligned: ${r.hash}`)
198
- : okResult(toJson({ ...meta, content: blob })));
199
- });
200
- });
201
- }),
202
- toolEntry('cas_list', 'List all stored content hashes (cBase32), one per line.', casListArgs, () => c.list().step(hashes => pure(okResult(hashes.map(vecToCBase32).join('\n'))))),
203
- ];
204
- };
205
- // ── Result helpers ──────────────────────────────────────────────────────────────
206
- /** A successful single-text-block tool result. */
207
- const okResult = (text) => ({ content: [{ type: 'text', text }] });
208
- // ── Handlers ────────────────────────────────────────────────────────────────────
209
- /**
210
- * MCP handlers for `FileCas`.
211
- */
212
- export const casMcpHandlers = (home) => fromRegistry(casToolRegistry(home));
213
- // ── Session configuration ───────────────────────────────────────────────────────
214
- /**
215
- * Static MCP configuration for the CAS server: advertises the `tools`
216
- * capability, identifies the server, and pins the protocol version.
217
- */
218
- export const casConfig = {
219
- serverInfo: { name: 'functionalscript-cas', version: '0.30.0' },
220
- capabilities: { tools: {} },
221
- protocolVersion: '2024-11-05',
222
- };
223
- // ── Server ──────────────────────────────────────────────────────────────────────
224
- /**
225
- * Runs the file CAS MCP server over stdio: allocates the session-state slot, builds
226
- * the `mcpStep` for `c`, and drives the read → parse → dispatch → write loop
227
- * until stdin EOF.
228
- */
229
- export const casMcpServer = (home) => create(uninitializedState).step(key => stdioTransport(mcpStep(casConfig)(casMcpHandlers(home))(key)));
230
- // ── Tests ────────────────────────────────────────────────────────────────────
231
- export const proof = {
232
- // casMcpServer is never called in integration tests because it drives a
233
- // real stdio server; call it here to cover its Effect-building body.
234
- casMcpServer: () => { casMcpServer('/'); },
235
- // The overflow guard in collectRead (lines 125-126) is only reached when
236
- // the running total of two stream chunks would exceed maxLength. Feed a
237
- // pure stream whose second chunk pushes it just over the limit so the
238
- // error branch executes without any real I/O.
239
- collectReadOverflow: () => {
240
- const half = maxLength / 2n;
241
- const v1 = vec(half)(0n);
242
- const v2 = vec(half + 1n)(0n);
243
- const stream = nonEmpty(ok(v1), nonEmpty(ok(v2), elEmpty()));
244
- const d = decode(collectRead(stream));
245
- if (!d.done || d.result[0] !== 'error') {
246
- throw 'expected overflow error';
247
- }
248
- },
249
- };
@@ -1,43 +0,0 @@
1
- /**
2
- * Centralized version pins and OS images used by the CI generator: runner
3
- * images, tool versions (Bun, Deno, Playwright, Rust, Node, Wasmtime, Wasmer,
4
- * TSGO).
5
- *
6
- * @module
7
- */
8
- export declare const images: {
9
- readonly ubuntu: {
10
- readonly intel: "ubuntu-26.04";
11
- readonly arm: "ubuntu-26.04-arm";
12
- };
13
- readonly macos: {
14
- readonly intel: "macos-26-intel";
15
- readonly arm: "macos-26";
16
- };
17
- readonly windows: {
18
- readonly intel: "windows-2025";
19
- readonly arm: "windows-11-arm";
20
- };
21
- };
22
- export declare const functionalscript: "0.35.2";
23
- export declare const bun = "1.3.14";
24
- export declare const deno = "2.9.1";
25
- export declare const playwright = "1.61.1";
26
- export declare const node: {
27
- readonly default: "26.4.0";
28
- readonly node22: "22.23.1";
29
- readonly node24: "24.18.0";
30
- };
31
- export declare const wasmtime = "46.0.1";
32
- export declare const wasmer = "7.2.0";
33
- export declare const tsgo = "7.0.0-dev.20260707.2";
34
- export declare const actions: {
35
- readonly 'actions/checkout': "v7";
36
- readonly 'actions/setup-node': "v6.4.0";
37
- readonly 'actions/cache': "v6.1.0";
38
- readonly 'denoland/setup-deno': "v2.0.5";
39
- readonly 'oven-sh/setup-bun': "v2.2.0";
40
- readonly 'bytecodealliance/actions/wasmtime/setup': "v1.1.3";
41
- readonly 'wasmerio/setup-wasmer': "v3.1";
42
- readonly 'dtolnay/rust-toolchain': "1.96.1";
43
- };
@@ -1,16 +0,0 @@
1
- /**
2
- * CI step builder for Deno: installs the pinned Deno version and runs the
3
- * FunctionalScript package smoke test plus Deno coverage in one canonical job.
4
- *
5
- * @module
6
- */
7
- import { deno } from "../config/module.f.js";
8
- import { clean, install, test, uses } from "../common/module.f.js";
9
- const denoTest = 'deno test --allow-read --allow-env --allow-sys';
10
- export const denoSteps = (version) => clean([
11
- install(uses('denoland/setup-deno', { 'deno-version': deno })),
12
- install({ run: `deno install -g -A npm:functionalscript@${version}` }),
13
- test({ run: `deno run -A npm:functionalscript@${version} t` }),
14
- test({ run: 'deno install --frozen' }),
15
- test({ run: `${denoTest} --coverage && deno coverage --include='.*module\\.f\\.ts'` }),
16
- ]);
@@ -1,161 +0,0 @@
1
- import { utf8 } from "../../text/module.f.js";
2
- import { empty, uint } from "../../types/bit_vec/module.f.js";
3
- import { computeSync, sha224, sha256 } from "../sha2/module.f.js";
4
- import { bitcoinPow, genesisNBits, genesisTarget, pow, sha256Pow, targetFromNBits } from "./module.f.js";
5
- const p256 = sha256Pow;
6
- const p224 = pow(sha224);
7
- const sample = utf8('functionalscript pow proof');
8
- const emptyData = empty;
9
- /** Target large enough for {@link sample} under SHA-256 (`0x207fffff`). */
10
- const easyNBits = 0x207fffffn;
11
- /** Compact encoding for target `1` (`0x03000001`). */
12
- const hardNBits = 0x03000001n;
13
- /** SHA-256 of the empty message (NIST / Bitcoin block merkle uses this primitive). */
14
- const sha256EmptyHash = 0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855n;
15
- /** Bitcoin block #0 header hash as big-endian uint256. */
16
- const block0Hash = 0x000000000019d6689c085ae165831e934ff763ae46a2a6cffb388491c27dc990n;
17
- const expectNull = (nBits) => {
18
- if (targetFromNBits(nBits) !== null) {
19
- throw nBits;
20
- }
21
- };
22
- export const proof = {
23
- targetFromNBits: {
24
- genesis: () => {
25
- if (targetFromNBits(genesisNBits) !== genesisTarget) {
26
- throw 'genesis target';
27
- }
28
- },
29
- block0HashWithinGenesisTarget: () => {
30
- if (block0Hash > genesisTarget) {
31
- throw 'block0 hash exceeds genesis target';
32
- }
33
- },
34
- exponent3: () => {
35
- if (targetFromNBits(0x030000ffn) !== 0xffn) {
36
- throw 'exponent 3';
37
- }
38
- },
39
- exponent2: () => {
40
- if (targetFromNBits(0x02008000n) !== 0x80n) {
41
- throw 'exponent 2';
42
- }
43
- },
44
- hardTargetOne: () => {
45
- if (targetFromNBits(hardNBits) !== 1n) {
46
- throw 'hard target';
47
- }
48
- },
49
- zero: () => {
50
- if (targetFromNBits(0n) !== 0n) {
51
- throw 'zero nBits';
52
- }
53
- },
54
- negative: () => {
55
- expectNull(0x01800001n);
56
- },
57
- negativeHighMantissa: () => {
58
- expectNull(0x22ffffffn);
59
- },
60
- overflowExponent: () => {
61
- expectNull(0x23000001n);
62
- },
63
- exceeds256: () => {
64
- expectNull(0x227fffffn);
65
- },
66
- },
67
- meets: {
68
- easy: () => {
69
- if (!p256.meets(easyNBits)(sample)) {
70
- throw 'easy nBits should pass';
71
- }
72
- },
73
- hard: () => {
74
- if (p256.meets(hardNBits)(sample)) {
75
- throw 'target 1 should fail';
76
- }
77
- },
78
- genesisFailsSample: () => {
79
- if (p256.meets(genesisNBits)(sample)) {
80
- throw 'genesis target too hard for sample';
81
- }
82
- },
83
- zeroTargetRejectsSample: () => {
84
- if (p256.meets(0n)(sample)) {
85
- throw 'non-zero hash vs zero target';
86
- }
87
- },
88
- invalidNBits: () => {
89
- if (p256.meets(0x01800001n)(sample)) {
90
- throw 'invalid nBits should not pass';
91
- }
92
- },
93
- hashLeqTarget: () => {
94
- const h = p256.hashInt(sample);
95
- const target = targetFromNBits(easyNBits);
96
- if (target === null) {
97
- throw 'easy nBits decode';
98
- }
99
- if (h > target) {
100
- throw 'hash above easy target';
101
- }
102
- if (!(h <= target)) {
103
- throw 'hash <= target';
104
- }
105
- },
106
- },
107
- hashInt: {
108
- sha256Sample: () => {
109
- const digest = computeSync(sha256)([sample]);
110
- if (p256.hashInt(sample) !== uint(digest)) {
111
- throw 'sha256 sample';
112
- }
113
- },
114
- sha256Empty: () => {
115
- if (p256.hashInt(emptyData) !== sha256EmptyHash) {
116
- throw 'sha256 empty constant';
117
- }
118
- const digest = computeSync(sha256)([emptyData]);
119
- if (p256.hashInt(emptyData) !== uint(digest)) {
120
- throw 'sha256 empty';
121
- }
122
- },
123
- sha224: () => {
124
- const digest = computeSync(sha224)([sample]);
125
- if (p224.hashInt(sample) !== uint(digest)) {
126
- throw 'sha224';
127
- }
128
- },
129
- stable: () => {
130
- if (p256.hashInt(sample) !== p256.hashInt(sample)) {
131
- throw 'stable';
132
- }
133
- },
134
- },
135
- pow: {
136
- sha256Pow: () => {
137
- const built = pow(sha256);
138
- if (sha256Pow.hashInt(sample) !== built.hashInt(sample)) {
139
- throw 'hashInt';
140
- }
141
- if (sha256Pow.meets(easyNBits)(sample) !== built.meets(easyNBits)(sample)) {
142
- throw 'meets';
143
- }
144
- },
145
- bitcoinPow: () => {
146
- if (bitcoinPow.hashInt(sample) !== sha256Pow.hashInt(sample)) {
147
- throw 'bitcoinPow';
148
- }
149
- },
150
- independentInstances: () => {
151
- const a = pow(sha256);
152
- const b = pow(sha256);
153
- if (a.hashInt(sample) !== b.hashInt(sample)) {
154
- throw 'hashInt';
155
- }
156
- if (a.meets(easyNBits)(sample) !== b.meets(easyNBits)(sample)) {
157
- throw 'meets';
158
- }
159
- },
160
- },
161
- };
@@ -1,2 +0,0 @@
1
- declare const _default: "text";
2
- export default _default;
@@ -1,12 +0,0 @@
1
- import { type List } from '../../types/list/module.f.ts';
2
- import * as jsTokenizer from '../../js/tokenizer/module.f.ts';
3
- export type DjsToken = {
4
- readonly kind: 'true' | 'false' | 'null' | 'undefined';
5
- } | {
6
- readonly kind: '{' | '}' | ':' | ',' | '[' | ']' | '.' | '=';
7
- } | jsTokenizer.StringToken | jsTokenizer.NumberToken | jsTokenizer.ErrorToken | jsTokenizer.IdToken | jsTokenizer.BigIntToken | jsTokenizer.WhitespaceToken | jsTokenizer.NewLineToken | jsTokenizer.CommentToken | jsTokenizer.EofToken;
8
- export type DjsTokenWithMetadata = {
9
- readonly token: DjsToken;
10
- readonly metadata: jsTokenizer.TokenMetadata;
11
- };
12
- export declare const tokenize: (input: List<number>) => (path: string) => List<DjsTokenWithMetadata>;