functionalscript 0.44.0 → 0.46.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 (571) hide show
  1. package/README.md +5 -3
  2. package/fjs/asn.1/module.f.mjs +8 -1
  3. package/fjs/asn.1/proof.f.d.mts +15 -0
  4. package/fjs/asn.1/proof.f.mjs +31 -3
  5. package/fjs/asserts/module.f.d.mts +14 -0
  6. package/fjs/asserts/module.f.mjs +20 -0
  7. package/fjs/asserts/proof.f.d.mts +3 -0
  8. package/fjs/asserts/proof.f.mjs +15 -1
  9. package/fjs/basen/base128/module.f.mjs +22 -5
  10. package/fjs/basen/base128/proof.f.d.mts +3 -1
  11. package/fjs/basen/base128/proof.f.mjs +3 -1
  12. package/fjs/basen/base64/module.f.mjs +7 -3
  13. package/fjs/basen/base64/proof.f.d.mts +3 -1
  14. package/fjs/basen/base64/proof.f.mjs +7 -4
  15. package/fjs/basen/cbase32/proof.f.d.mts +3 -1
  16. package/fjs/basen/cbase32/proof.f.mjs +3 -1
  17. package/fjs/bnf/data/module.f.d.mts +32 -6
  18. package/fjs/bnf/data/module.f.mjs +112 -7
  19. package/fjs/bnf/data/proof.f.d.mts +2 -0
  20. package/fjs/bnf/data/proof.f.mjs +74 -4
  21. package/fjs/bnf/data/types.d.ts +20 -2
  22. package/fjs/bnf/descent/module.f.d.mts +34 -5
  23. package/fjs/bnf/descent/module.f.mjs +176 -54
  24. package/fjs/bnf/descent/proof.f.d.mts +3 -0
  25. package/fjs/bnf/descent/proof.f.mjs +189 -27
  26. package/fjs/bnf/descent/types.d.ts +24 -18
  27. package/fjs/bnf/ll1/module.f.d.mts +74 -6
  28. package/fjs/bnf/ll1/module.f.mjs +297 -95
  29. package/fjs/bnf/ll1/proof.f.d.mts +17 -2
  30. package/fjs/bnf/ll1/proof.f.mjs +372 -137
  31. package/fjs/bnf/ll1/types.d.ts +25 -27
  32. package/fjs/bnf/matcher/module.f.d.mts +66 -0
  33. package/fjs/bnf/matcher/module.f.mjs +81 -0
  34. package/fjs/bnf/matcher/proof.f.d.mts +10 -0
  35. package/fjs/bnf/matcher/proof.f.mjs +79 -0
  36. package/fjs/bnf/matcher/types.d.ts +54 -0
  37. package/fjs/bnf/module.f.d.mts +15 -6
  38. package/fjs/bnf/module.f.mjs +52 -11
  39. package/fjs/bnf/proof.f.d.mts +2 -0
  40. package/fjs/bnf/proof.f.mjs +79 -3
  41. package/fjs/bnf/testlib.f.d.mts +31 -0
  42. package/fjs/bnf/testlib.f.mjs +80 -0
  43. package/fjs/bnf/token_symbol/module.f.d.mts +4 -3
  44. package/fjs/bnf/token_symbol/module.f.mjs +7 -6
  45. package/fjs/bnf/token_symbol/proof.f.mjs +5 -2
  46. package/fjs/bnf/token_symbol/types.d.ts +2 -2
  47. package/fjs/bnf/types.d.ts +10 -3
  48. package/fjs/cas/cli/module.f.d.mts +1 -1
  49. package/fjs/cas/cli/module.f.mjs +14 -20
  50. package/fjs/cas/cli/proof.f.d.mts +4 -4
  51. package/fjs/cas/cli/proof.f.mjs +47 -34
  52. package/fjs/cas/evo/module.f.d.mts +71 -31
  53. package/fjs/cas/evo/module.f.mjs +223 -138
  54. package/fjs/cas/evo/proof.f.d.mts +10 -1
  55. package/fjs/cas/evo/proof.f.mjs +311 -226
  56. package/fjs/cas/evo/types.d.ts +45 -9
  57. package/fjs/cas/module.f.d.mts +18 -32
  58. package/fjs/cas/module.f.mjs +164 -176
  59. package/fjs/cas/proof.f.d.mts +11 -8
  60. package/fjs/cas/proof.f.mjs +259 -147
  61. package/fjs/cas/types.d.ts +24 -10
  62. package/fjs/ci/common/module.f.d.mts +1 -1
  63. package/fjs/ci/common/module.f.mjs +1 -0
  64. package/fjs/ci/config/module.f.d.mts +3 -3
  65. package/fjs/ci/config/module.f.mjs +3 -3
  66. package/fjs/ci/module.f.d.mts +5 -5
  67. package/fjs/ci/module.f.mjs +8 -7
  68. package/fjs/ci/nix/module.f.d.mts +7 -5
  69. package/fjs/ci/nix/module.f.mjs +13 -12
  70. package/fjs/ci/nix/proof.f.d.mts +2 -0
  71. package/fjs/ci/nix/proof.f.mjs +4 -4
  72. package/fjs/ci/proof.f.d.mts +4 -2
  73. package/fjs/ci/proof.f.mjs +13 -8
  74. package/fjs/cli/module.f.d.mts +4 -6
  75. package/fjs/cli/module.f.mjs +4 -8
  76. package/fjs/cli/proof.f.d.mts +4 -2
  77. package/fjs/cli/proof.f.mjs +21 -18
  78. package/fjs/cli/types.d.ts +2 -3
  79. package/fjs/common/monoid/module.f.d.mts +70 -12
  80. package/fjs/common/monoid/module.f.mjs +177 -14
  81. package/fjs/common/monoid/proof.f.d.mts +12 -1
  82. package/fjs/common/monoid/proof.f.mjs +88 -4
  83. package/fjs/common/monoid/types.d.ts +23 -0
  84. package/fjs/crypto/hmac/module.f.mjs +2 -2
  85. package/fjs/crypto/secp/proof.f.d.mts +3 -1
  86. package/fjs/crypto/secp/proof.f.mjs +3 -1
  87. package/fjs/crypto/sha2/module.f.mjs +3 -1
  88. package/fjs/crypto/sha2/proof.f.d.mts +4 -1
  89. package/fjs/crypto/sha2/proof.f.mjs +27 -1
  90. package/fjs/crypto/sha2/types.d.ts +11 -0
  91. package/fjs/crypto/sign/module.f.mjs +2 -2
  92. package/fjs/crypto/vdf/module.f.d.mts +23 -4
  93. package/fjs/crypto/vdf/module.f.mjs +6 -4
  94. package/fjs/dev/module.f.d.mts +17 -5
  95. package/fjs/dev/module.f.mjs +60 -30
  96. package/fjs/dev/update/module.f.d.mts +11 -3
  97. package/fjs/dev/update/module.f.mjs +16 -11
  98. package/fjs/dev/update/proof.f.d.mts +4 -3
  99. package/fjs/dev/update/proof.f.mjs +11 -7
  100. package/fjs/djs/module.f.d.mts +13 -5
  101. package/fjs/djs/module.f.mjs +31 -16
  102. package/fjs/djs/parser/module.f.d.mts +16 -3
  103. package/fjs/djs/parser/module.f.mjs +135 -16
  104. package/fjs/djs/parser/proof.f.d.mts +8 -1
  105. package/fjs/djs/parser/proof.f.mjs +287 -13
  106. package/fjs/djs/parser/types.d.ts +7 -1
  107. package/fjs/djs/proof.f.d.mts +20 -1
  108. package/fjs/djs/proof.f.mjs +190 -12
  109. package/fjs/djs/serializer/module.f.d.mts +25 -8
  110. package/fjs/djs/serializer/module.f.mjs +66 -19
  111. package/fjs/djs/serializer/proof.f.d.mts +5 -0
  112. package/fjs/djs/serializer/proof.f.mjs +23 -1
  113. package/fjs/djs/tokenizer/module.f.d.mts +17 -5
  114. package/fjs/djs/tokenizer/module.f.mjs +120 -73
  115. package/fjs/djs/tokenizer/proof.f.d.mts +3 -0
  116. package/fjs/djs/tokenizer/proof.f.mjs +86 -67
  117. package/fjs/djs/transpiler/module.f.d.mts +13 -19
  118. package/fjs/djs/transpiler/module.f.mjs +79 -72
  119. package/fjs/djs/transpiler/types.d.ts +29 -0
  120. package/fjs/djs/types.d.ts +7 -1
  121. package/fjs/effects/list/module.f.d.mts +23 -12
  122. package/fjs/effects/list/module.f.mjs +16 -12
  123. package/fjs/effects/list/types.d.ts +27 -7
  124. package/fjs/effects/memory/module.f.d.mts +6 -3
  125. package/fjs/effects/memory/module.f.mjs +7 -7
  126. package/fjs/effects/memory/proof.f.d.mts +4 -0
  127. package/fjs/effects/memory/proof.f.mjs +18 -9
  128. package/fjs/effects/memory/types.d.ts +4 -3
  129. package/fjs/effects/mock/module.f.d.mts +28 -4
  130. package/fjs/effects/mock/module.f.mjs +39 -5
  131. package/fjs/effects/mock/types.d.ts +10 -1
  132. package/fjs/effects/module.d.mts +12 -2
  133. package/fjs/effects/module.f.d.mts +469 -281
  134. package/fjs/effects/module.f.mjs +538 -299
  135. package/fjs/effects/module.mjs +11 -2
  136. package/fjs/effects/node/memory/module.d.mts +7 -2
  137. package/fjs/effects/node/memory/module.mjs +9 -5
  138. package/fjs/effects/node/memory/proof.d.mts +2 -0
  139. package/fjs/effects/node/memory/proof.mjs +12 -5
  140. package/fjs/effects/node/module.d.mts +8 -2
  141. package/fjs/effects/node/module.f.d.mts +183 -43
  142. package/fjs/effects/node/module.f.mjs +260 -62
  143. package/fjs/effects/node/module.mjs +61 -50
  144. package/fjs/effects/node/proof.f.d.mts +28 -2
  145. package/fjs/effects/node/proof.f.mjs +161 -42
  146. package/fjs/effects/node/types.d.ts +106 -18
  147. package/fjs/effects/node/virtual/module.f.d.mts +21 -4
  148. package/fjs/effects/node/virtual/module.f.mjs +113 -70
  149. package/fjs/effects/node/virtual/proof.f.d.mts +31 -2
  150. package/fjs/effects/node/virtual/proof.f.mjs +201 -8
  151. package/fjs/effects/proof.f.d.mts +69 -34
  152. package/fjs/effects/proof.f.mjs +413 -130
  153. package/fjs/effects/types.d.ts +161 -33
  154. package/fjs/emergent_testing/all.test.d.mts +8 -0
  155. package/fjs/emergent_testing/all.test.mjs +14 -0
  156. package/fjs/emergent_testing/module.f.d.mts +22 -10
  157. package/fjs/emergent_testing/module.f.mjs +119 -85
  158. package/fjs/emergent_testing/proof.f.d.mts +21 -7
  159. package/fjs/emergent_testing/proof.f.mjs +169 -35
  160. package/fjs/emergent_testing/types.d.ts +22 -4
  161. package/fjs/fsc/bnf.f.d.mts +3 -0
  162. package/fjs/fsc/bnf.f.mjs +4 -1
  163. package/fjs/fsc/json.f.d.mts +3 -0
  164. package/fjs/fsc/json.f.mjs +4 -1
  165. package/fjs/fsc/module.f.d.mts +9 -0
  166. package/fjs/fsc/module.f.mjs +5 -3
  167. package/fjs/fsm/module.f.d.mts +14 -4
  168. package/fjs/fsm/module.f.mjs +54 -37
  169. package/fjs/fsm/proof.f.d.mts +5 -0
  170. package/fjs/fsm/proof.f.mjs +87 -115
  171. package/fjs/js/keywords/module.f.d.mts +52 -0
  172. package/fjs/js/keywords/module.f.mjs +72 -0
  173. package/fjs/{emergent_testing/scenarios/return-value.pass.d.ts → js/keywords/proof.f.d.mts} +1 -1
  174. package/fjs/js/keywords/proof.f.mjs +13 -0
  175. package/fjs/js/tokenizer/module.f.d.mts +30 -3
  176. package/fjs/js/tokenizer/module.f.mjs +161 -211
  177. package/fjs/js/tokenizer/proof.f.d.mts +1 -0
  178. package/fjs/js/tokenizer/proof.f.mjs +54 -24
  179. package/fjs/js/tokenizer/types.d.ts +33 -24
  180. package/fjs/mcp/cas/module.f.d.mts +1 -6
  181. package/fjs/mcp/cas/module.f.mjs +55 -51
  182. package/fjs/mcp/cas/proof.f.d.mts +15 -0
  183. package/fjs/mcp/cas/proof.f.mjs +174 -0
  184. package/fjs/mcp/evo/module.f.d.mts +19 -10
  185. package/fjs/mcp/evo/module.f.mjs +48 -27
  186. package/fjs/mcp/evo/proof.f.d.mts +6 -1
  187. package/fjs/mcp/evo/proof.f.mjs +115 -31
  188. package/fjs/mcp/module.f.d.mts +39 -4
  189. package/fjs/mcp/module.f.mjs +14 -12
  190. package/fjs/mcp/proof.f.d.mts +13 -1
  191. package/fjs/mcp/proof.f.mjs +120 -61
  192. package/fjs/media/html/module.f.d.mts +12 -0
  193. package/fjs/media/html/module.f.mjs +7 -5
  194. package/fjs/media/html/proof.f.d.mts +3 -0
  195. package/fjs/media/html/proof.f.mjs +4 -1
  196. package/fjs/media/json/extended/module.f.d.mts +82 -0
  197. package/fjs/media/json/extended/module.f.mjs +153 -0
  198. package/fjs/media/json/extended/proof.f.d.mts +42 -0
  199. package/fjs/media/json/extended/proof.f.mjs +127 -0
  200. package/fjs/media/json/extended/types.d.ts +23 -0
  201. package/fjs/media/json/module.f.d.mts +8 -2
  202. package/fjs/media/json/module.f.mjs +43 -41
  203. package/fjs/media/json/number/module.f.d.mts +59 -0
  204. package/fjs/media/json/number/module.f.mjs +136 -0
  205. package/fjs/media/json/number/proof.f.d.mts +24 -0
  206. package/fjs/media/json/number/proof.f.mjs +86 -0
  207. package/fjs/media/json/number/types.d.ts +28 -0
  208. package/fjs/media/json/parser/module.f.d.mts +25 -13
  209. package/fjs/media/json/parser/module.f.mjs +133 -72
  210. package/fjs/media/json/parser/proof.f.d.mts +5 -0
  211. package/fjs/media/json/parser/proof.f.mjs +31 -1
  212. package/fjs/media/json/parser/types.d.ts +38 -14
  213. package/fjs/media/json/rtti/module.f.d.mts +1 -1
  214. package/fjs/media/json/rtti/module.f.mjs +1 -1
  215. package/fjs/media/json/rtti/proof.f.d.mts +3 -0
  216. package/fjs/media/json/rtti/proof.f.mjs +12 -12
  217. package/fjs/media/json/schema/module.f.d.mts +61 -27
  218. package/fjs/media/json/schema/module.f.mjs +218 -63
  219. package/fjs/media/json/schema/proof.f.d.mts +41 -1
  220. package/fjs/media/json/schema/proof.f.mjs +220 -9
  221. package/fjs/media/json/serializer/module.f.d.mts +44 -0
  222. package/fjs/media/json/serializer/module.f.mjs +71 -9
  223. package/fjs/media/json/tokenizer/module.f.d.mts +8 -0
  224. package/fjs/media/json/tokenizer/module.f.mjs +31 -8
  225. package/fjs/media/json/tokenizer/proof.f.d.mts +6 -0
  226. package/fjs/media/json/tokenizer/proof.f.mjs +62 -21
  227. package/fjs/media/json/types.d.ts +36 -10
  228. package/fjs/media/lock/module.f.d.mts +100 -0
  229. package/fjs/media/lock/module.f.mjs +125 -0
  230. package/fjs/media/lock/proof.f.d.mts +33 -0
  231. package/fjs/media/lock/proof.f.mjs +196 -0
  232. package/fjs/media/lock/types.d.ts +15 -0
  233. package/fjs/media/module.f.d.mts +6 -5
  234. package/fjs/media/module.f.mjs +8 -7
  235. package/fjs/media/nix/module.f.d.mts +13 -0
  236. package/fjs/media/nix/module.f.mjs +4 -2
  237. package/fjs/media/nix/proof.f.d.mts +3 -0
  238. package/fjs/media/nix/proof.f.mjs +4 -1
  239. package/fjs/media/note/module.f.d.mts +121 -0
  240. package/fjs/media/note/module.f.mjs +131 -0
  241. package/fjs/media/note/proof.f.d.mts +29 -0
  242. package/fjs/media/note/proof.f.mjs +150 -0
  243. package/fjs/media/note/types.d.ts +10 -0
  244. package/fjs/media/proof.f.d.mts +4 -1
  245. package/fjs/media/proof.f.mjs +40 -21
  246. package/fjs/media/revision/module.f.d.mts +83 -7
  247. package/fjs/media/revision/module.f.mjs +127 -23
  248. package/fjs/media/revision/proof.f.d.mts +14 -0
  249. package/fjs/media/revision/proof.f.mjs +93 -2
  250. package/fjs/media/revision/types.d.ts +34 -5
  251. package/fjs/media/type/module.f.d.mts +53 -18
  252. package/fjs/media/type/module.f.mjs +87 -97
  253. package/fjs/media/type/proof.f.d.mts +17 -0
  254. package/fjs/media/type/proof.f.mjs +73 -13
  255. package/fjs/module.d.mts +5 -0
  256. package/fjs/module.f.d.mts +8 -0
  257. package/fjs/module.f.mjs +33 -10
  258. package/fjs/module.mjs +6 -0
  259. package/fjs/nanvm/proof.f.mjs +3 -3
  260. package/fjs/nanvm/rust/module.f.mjs +1 -1
  261. package/fjs/nanvm/update/module.f.d.mts +4 -4
  262. package/fjs/nanvm/update/module.f.mjs +8 -9
  263. package/fjs/nanvm/update/proof.f.mjs +4 -3
  264. package/fjs/path/module.f.d.mts +8 -0
  265. package/fjs/path/module.f.mjs +4 -2
  266. package/fjs/proof.f.d.mts +7 -3
  267. package/fjs/proof.f.mjs +41 -12
  268. package/fjs/protocol/json_rpc/module.f.d.mts +3 -3
  269. package/fjs/protocol/json_rpc/module.f.mjs +10 -7
  270. package/fjs/protocol/json_rpc/proof.f.d.mts +6 -0
  271. package/fjs/protocol/json_rpc/proof.f.mjs +26 -5
  272. package/fjs/protocol/mcp/module.f.d.mts +10 -13
  273. package/fjs/protocol/mcp/module.f.mjs +74 -58
  274. package/fjs/protocol/mcp/proof.f.d.mts +16 -3
  275. package/fjs/protocol/mcp/proof.f.mjs +224 -69
  276. package/fjs/protocol/mcp/stdio/module.f.d.mts +17 -11
  277. package/fjs/protocol/mcp/stdio/module.f.mjs +39 -33
  278. package/fjs/protocol/mcp/stdio/proof.f.d.mts +5 -3
  279. package/fjs/protocol/mcp/stdio/proof.f.mjs +46 -13
  280. package/fjs/protocol/mcp/stdio/types.d.ts +14 -0
  281. package/fjs/protocol/mcp/types.d.ts +17 -6
  282. package/fjs/sul/id/module.f.d.mts +4 -0
  283. package/fjs/sul/id/module.f.mjs +6 -6
  284. package/fjs/sul/level/hash/module.f.d.mts +4 -1
  285. package/fjs/sul/level/hash/module.f.mjs +6 -4
  286. package/fjs/sul/level/hash/proof.f.d.mts +4 -0
  287. package/fjs/sul/level/hash/proof.f.mjs +7 -4
  288. package/fjs/sul/level/literal/module.f.d.mts +4 -1
  289. package/fjs/sul/level/literal/module.f.mjs +4 -3
  290. package/fjs/sul/level/literal/proof.f.d.mts +3 -0
  291. package/fjs/sul/level/literal/proof.f.mjs +4 -1
  292. package/fjs/sul/module.f.d.mts +5 -3
  293. package/fjs/sul/module.f.mjs +23 -17
  294. package/fjs/sul/proof.f.d.mts +4 -0
  295. package/fjs/sul/proof.f.mjs +5 -2
  296. package/fjs/text/ascii/module.f.d.mts +26 -0
  297. package/fjs/text/ascii/module.f.mjs +49 -1
  298. package/fjs/text/ascii/proof.f.d.mts +10 -0
  299. package/fjs/text/ascii/proof.f.mjs +33 -1
  300. package/fjs/text/code_point/module.f.d.mts +29 -3
  301. package/fjs/text/code_point/module.f.mjs +32 -9
  302. package/fjs/text/code_point/proof.f.d.mts +2 -0
  303. package/fjs/text/code_point/proof.f.mjs +39 -0
  304. package/fjs/text/module.f.d.mts +4 -2
  305. package/fjs/text/module.f.mjs +4 -3
  306. package/fjs/text/proof.f.d.mts +3 -0
  307. package/fjs/text/proof.f.mjs +4 -1
  308. package/fjs/text/sgr/module.f.d.mts +6 -5
  309. package/fjs/text/sgr/module.f.mjs +8 -8
  310. package/fjs/text/sgr/proof.f.d.mts +3 -0
  311. package/fjs/text/sgr/proof.f.mjs +4 -1
  312. package/fjs/text/utf16/module.f.d.mts +5 -1
  313. package/fjs/text/utf16/module.f.mjs +38 -35
  314. package/fjs/text/utf16/proof.f.d.mts +3 -1
  315. package/fjs/text/utf16/proof.f.mjs +19 -2
  316. package/fjs/text/utf8/module.f.d.mts +9 -5
  317. package/fjs/text/utf8/module.f.mjs +20 -20
  318. package/fjs/types/array/module.f.d.mts +2 -1
  319. package/fjs/types/array/module.f.mjs +16 -4
  320. package/fjs/types/bigfloat/module.f.d.mts +21 -1
  321. package/fjs/types/bigfloat/module.f.mjs +33 -7
  322. package/fjs/types/bigfloat/proof.f.d.mts +1 -0
  323. package/fjs/types/bigfloat/proof.f.mjs +46 -0
  324. package/fjs/types/bigint/module.f.d.mts +4 -0
  325. package/fjs/types/bigint/module.f.mjs +4 -3
  326. package/fjs/types/bit_vec/module.f.d.mts +10 -16
  327. package/fjs/types/bit_vec/module.f.mjs +99 -95
  328. package/fjs/types/bit_vec/proof.f.d.mts +6 -0
  329. package/fjs/types/bit_vec/proof.f.mjs +31 -5
  330. package/fjs/types/btree/find/module.f.d.mts +5 -1
  331. package/fjs/types/btree/find/module.f.mjs +5 -5
  332. package/fjs/types/btree/find/proof.f.d.mts +5 -1
  333. package/fjs/types/btree/find/proof.f.mjs +5 -3
  334. package/fjs/types/btree/module.f.d.mts +3 -0
  335. package/fjs/types/btree/module.f.mjs +3 -2
  336. package/fjs/types/btree/proof.f.d.mts +5 -1
  337. package/fjs/types/btree/proof.f.mjs +5 -3
  338. package/fjs/types/btree/remove/module.f.d.mts +11 -0
  339. package/fjs/types/btree/remove/module.f.mjs +10 -10
  340. package/fjs/types/btree/remove/proof.f.d.mts +3 -0
  341. package/fjs/types/btree/remove/proof.f.mjs +4 -1
  342. package/fjs/types/btree/set/module.f.d.mts +9 -0
  343. package/fjs/types/btree/set/module.f.mjs +14 -17
  344. package/fjs/types/btree/set/proof.f.d.mts +3 -0
  345. package/fjs/types/btree/set/proof.f.mjs +16 -1
  346. package/fjs/types/btree/types/module.f.d.mts +2 -1
  347. package/fjs/types/btree/types/module.f.mjs +2 -1
  348. package/fjs/types/byte_set/module.f.d.mts +20 -4
  349. package/fjs/types/byte_set/module.f.mjs +18 -8
  350. package/fjs/types/byte_set/proof.f.d.mts +3 -1
  351. package/fjs/types/byte_set/proof.f.mjs +10 -8
  352. package/fjs/types/function/compare/module.f.d.mts +3 -2
  353. package/fjs/types/function/compare/module.f.mjs +13 -5
  354. package/fjs/types/function/module.f.d.mts +8 -1
  355. package/fjs/types/function/module.f.mjs +8 -1
  356. package/fjs/types/function/operator/module.f.d.mts +2 -1
  357. package/fjs/types/function/operator/module.f.mjs +2 -2
  358. package/fjs/types/list/module.f.d.mts +10 -3
  359. package/fjs/types/list/module.f.mjs +6 -4
  360. package/fjs/types/list/proof.f.d.mts +4 -1
  361. package/fjs/types/list/proof.f.mjs +4 -2
  362. package/fjs/types/nibble_set/module.f.d.mts +2 -1
  363. package/fjs/types/nibble_set/module.f.mjs +2 -2
  364. package/fjs/types/nominal/module.f.d.mts +2 -1
  365. package/fjs/types/nominal/module.f.mjs +2 -1
  366. package/fjs/types/nullable/module.f.d.mts +26 -6
  367. package/fjs/types/nullable/module.f.mjs +25 -6
  368. package/fjs/types/nullable/proof.f.d.mts +4 -0
  369. package/fjs/types/nullable/proof.f.mjs +15 -0
  370. package/fjs/types/number/module.f.d.mts +4 -0
  371. package/fjs/types/number/module.f.mjs +4 -3
  372. package/fjs/types/object/module.f.d.mts +26 -4
  373. package/fjs/types/object/module.f.mjs +26 -7
  374. package/fjs/types/object/proof.f.d.mts +5 -2
  375. package/fjs/types/object/proof.f.mjs +6 -3
  376. package/fjs/types/object/structurally_same/module.f.d.mts +39 -0
  377. package/fjs/types/object/structurally_same/module.f.mjs +59 -0
  378. package/fjs/types/object/structurally_same/proof.f.d.mts +6 -0
  379. package/fjs/types/object/structurally_same/proof.f.mjs +73 -0
  380. package/fjs/types/ordered_map/module.f.d.mts +5 -0
  381. package/fjs/types/ordered_map/module.f.mjs +5 -4
  382. package/fjs/types/ordered_map/proof.f.d.mts +3 -0
  383. package/fjs/types/ordered_map/proof.f.mjs +4 -1
  384. package/fjs/types/patricia_trie/module.f.d.mts +2 -1
  385. package/fjs/types/patricia_trie/module.f.mjs +27 -12
  386. package/fjs/types/patricia_trie/proof.f.d.mts +3 -0
  387. package/fjs/types/patricia_trie/proof.f.mjs +4 -1
  388. package/fjs/types/prime_field/module.f.d.mts +3 -1
  389. package/fjs/types/prime_field/module.f.mjs +3 -2
  390. package/fjs/types/range/module.f.d.mts +2 -1
  391. package/fjs/types/range/module.f.mjs +2 -2
  392. package/fjs/types/range_map/module.f.d.mts +6 -0
  393. package/fjs/types/range_map/module.f.mjs +6 -9
  394. package/fjs/types/range_map/proof.f.d.mts +5 -1
  395. package/fjs/types/range_map/proof.f.mjs +5 -3
  396. package/fjs/types/range_set/module.f.d.mts +5 -0
  397. package/fjs/types/range_set/module.f.mjs +1 -0
  398. package/fjs/types/range_set/proof.f.d.mts +3 -0
  399. package/fjs/types/range_set/proof.f.mjs +4 -1
  400. package/fjs/types/result/module.d.mts +8 -0
  401. package/fjs/types/result/module.f.d.mts +37 -7
  402. package/fjs/types/result/module.f.mjs +38 -8
  403. package/fjs/types/result/module.mjs +9 -1
  404. package/fjs/types/result/proof.f.d.mts +5 -0
  405. package/fjs/types/result/proof.f.mjs +22 -2
  406. package/fjs/types/rtti/common/module.f.d.mts +44 -14
  407. package/fjs/types/rtti/common/module.f.mjs +42 -36
  408. package/fjs/types/rtti/common/proof.f.d.mts +4 -0
  409. package/fjs/types/rtti/common/proof.f.mjs +10 -7
  410. package/fjs/types/rtti/data/module.f.d.mts +134 -0
  411. package/fjs/types/rtti/data/module.f.mjs +1053 -0
  412. package/fjs/types/rtti/data/proof.f.d.mts +76 -0
  413. package/fjs/types/rtti/data/proof.f.mjs +589 -0
  414. package/fjs/types/rtti/data/types.d.ts +83 -0
  415. package/fjs/types/rtti/module.f.d.mts +12 -5
  416. package/fjs/types/rtti/module.f.mjs +7 -5
  417. package/fjs/types/rtti/parse/module.f.d.mts +48 -0
  418. package/fjs/types/rtti/parse/module.f.mjs +45 -34
  419. package/fjs/types/rtti/parse/proof.f.d.mts +3 -2
  420. package/fjs/types/rtti/parse/proof.f.mjs +51 -52
  421. package/fjs/types/rtti/proof.f.d.mts +3 -1
  422. package/fjs/types/rtti/proof.f.mjs +6 -2
  423. package/fjs/types/rtti/ts/module.f.d.mts +68 -9
  424. package/fjs/types/rtti/ts/module.f.mjs +258 -30
  425. package/fjs/types/rtti/ts/proof.f.d.mts +44 -0
  426. package/fjs/types/rtti/ts/proof.f.mjs +152 -4
  427. package/fjs/types/rtti/ts/types.d.ts +25 -1
  428. package/fjs/types/rtti/types.d.ts +40 -0
  429. package/fjs/types/sorted_list/module.f.d.mts +4 -1
  430. package/fjs/types/sorted_list/module.f.mjs +21 -12
  431. package/fjs/types/sorted_list/proof.f.d.mts +3 -1
  432. package/fjs/types/sorted_list/proof.f.mjs +3 -1
  433. package/fjs/types/sorted_set/module.f.d.mts +49 -1
  434. package/fjs/types/sorted_set/module.f.mjs +26 -2
  435. package/fjs/types/sorted_set/proof.f.d.mts +4 -1
  436. package/fjs/types/sorted_set/proof.f.mjs +19 -2
  437. package/fjs/types/string/module.f.d.mts +4 -0
  438. package/fjs/types/string/module.f.mjs +4 -3
  439. package/fjs/types/string_set/module.f.d.mts +3 -1
  440. package/fjs/types/string_set/module.f.mjs +3 -2
  441. package/fjs/types/ts/module.f.d.mts +2 -0
  442. package/fjs/types/ts/module.f.mjs +3 -3
  443. package/fjs/types/ts/proof.f.d.mts +1 -0
  444. package/fjs/types/ts/proof.f.mjs +5 -0
  445. package/fjs/types/ts/types.d.ts +6 -1
  446. package/fjs/types/uint8array/module.f.d.mts +13 -2
  447. package/fjs/types/uint8array/module.f.mjs +20 -15
  448. package/fjs/website/module.f.d.mts +5 -2
  449. package/fjs/website/module.f.mjs +6 -8
  450. package/fjs/website/proof.f.mjs +2 -1
  451. package/package.json +3 -3
  452. package/fjs/asn.1/types.js +0 -6
  453. package/fjs/asserts/types.js +0 -6
  454. package/fjs/basen/types.js +0 -6
  455. package/fjs/bnf/data/types.js +0 -6
  456. package/fjs/bnf/descent/types.js +0 -6
  457. package/fjs/bnf/ll1/types.js +0 -6
  458. package/fjs/bnf/token_symbol/types.js +0 -6
  459. package/fjs/bnf/types.js +0 -6
  460. package/fjs/cas/evo/types.js +0 -7
  461. package/fjs/cas/types.js +0 -6
  462. package/fjs/ci/common/types.js +0 -1
  463. package/fjs/ci/nix/types.js +0 -6
  464. package/fjs/ci/types.js +0 -6
  465. package/fjs/cli/types.js +0 -6
  466. package/fjs/common/monoid/types.js +0 -6
  467. package/fjs/crypto/pow/types.js +0 -6
  468. package/fjs/crypto/secp/types.js +0 -6
  469. package/fjs/crypto/sha2/types.js +0 -6
  470. package/fjs/crypto/sign/types.js +0 -6
  471. package/fjs/crypto/vdf/types.js +0 -6
  472. package/fjs/dev/package_json/module.f.d.mts +0 -32
  473. package/fjs/dev/package_json/module.f.mjs +0 -37
  474. package/fjs/dev/package_json/proof.f.d.mts +0 -6
  475. package/fjs/dev/package_json/proof.f.mjs +0 -32
  476. package/fjs/dev/types.js +0 -6
  477. package/fjs/djs/ast/types.js +0 -8
  478. package/fjs/djs/parser/types.js +0 -7
  479. package/fjs/djs/tokenizer/types.js +0 -7
  480. package/fjs/djs/types.js +0 -7
  481. package/fjs/effects/eff/module.f.d.mts +0 -10
  482. package/fjs/effects/eff/module.f.mjs +0 -68
  483. package/fjs/effects/eff/proof.f.d.mts +0 -12
  484. package/fjs/effects/eff/proof.f.mjs +0 -66
  485. package/fjs/effects/eff/types.d.ts +0 -71
  486. package/fjs/effects/eff/types.js +0 -6
  487. package/fjs/effects/list/types.js +0 -6
  488. package/fjs/effects/memory/types.js +0 -6
  489. package/fjs/effects/mock/types.js +0 -6
  490. package/fjs/effects/node/types.js +0 -6
  491. package/fjs/effects/node/virtual/types.js +0 -7
  492. package/fjs/effects/types.js +0 -6
  493. package/fjs/emergent_testing/all.test.d.ts +0 -1
  494. package/fjs/emergent_testing/all.test.js +0 -5
  495. package/fjs/emergent_testing/scenarios/all.d.ts +0 -1
  496. package/fjs/emergent_testing/scenarios/all.js +0 -1
  497. package/fjs/emergent_testing/scenarios/async-subtests.fail.d.ts +0 -6
  498. package/fjs/emergent_testing/scenarios/async-subtests.fail.js +0 -9
  499. package/fjs/emergent_testing/scenarios/async-subtests.pass.d.ts +0 -6
  500. package/fjs/emergent_testing/scenarios/async-subtests.pass.js +0 -9
  501. package/fjs/emergent_testing/scenarios/async.fail.d.ts +0 -3
  502. package/fjs/emergent_testing/scenarios/async.fail.js +0 -6
  503. package/fjs/emergent_testing/scenarios/async.pass.d.ts +0 -3
  504. package/fjs/emergent_testing/scenarios/async.pass.js +0 -5
  505. package/fjs/emergent_testing/scenarios/fail.fail.d.ts +0 -3
  506. package/fjs/emergent_testing/scenarios/fail.fail.js +0 -3
  507. package/fjs/emergent_testing/scenarios/return-value.pass.js +0 -4
  508. package/fjs/emergent_testing/scenarios/thenable.pass.d.ts +0 -5
  509. package/fjs/emergent_testing/scenarios/thenable.pass.js +0 -11
  510. package/fjs/emergent_testing/scenarios/thenable2.pass.d.ts +0 -5
  511. package/fjs/emergent_testing/scenarios/thenable2.pass.js +0 -3
  512. package/fjs/emergent_testing/scenarios/throw.pass.d.ts +0 -5
  513. package/fjs/emergent_testing/scenarios/throw.pass.js +0 -3
  514. package/fjs/emergent_testing/types.js +0 -6
  515. package/fjs/js/tokenizer/types.js +0 -6
  516. package/fjs/media/html/types.js +0 -6
  517. package/fjs/media/json/parser/types.js +0 -6
  518. package/fjs/media/json/tokenizer/types.js +0 -6
  519. package/fjs/media/json/types.js +0 -13
  520. package/fjs/media/nix/types.js +0 -6
  521. package/fjs/media/revision/types.js +0 -8
  522. package/fjs/media/type/types.js +0 -6
  523. package/fjs/media/types.js +0 -7
  524. package/fjs/nanvm/types.js +0 -11
  525. package/fjs/protocol/json_rpc/types.js +0 -8
  526. package/fjs/protocol/mcp/types.js +0 -8
  527. package/fjs/sul/id/types.js +0 -6
  528. package/fjs/sul/level/hash/types.js +0 -6
  529. package/fjs/sul/level/literal/types.js +0 -6
  530. package/fjs/sul/types.js +0 -6
  531. package/fjs/text/sgr/types.js +0 -6
  532. package/fjs/text/types.js +0 -6
  533. package/fjs/text/utf16/types.js +0 -6
  534. package/fjs/text/utf8/types.js +0 -6
  535. package/fjs/types/array/types.js +0 -6
  536. package/fjs/types/bigfloat/types.js +0 -6
  537. package/fjs/types/bigint/types.js +0 -6
  538. package/fjs/types/bit_vec/types.js +0 -6
  539. package/fjs/types/btree/find/types.js +0 -6
  540. package/fjs/types/btree/types/types.js +0 -6
  541. package/fjs/types/byte_set/types.js +0 -6
  542. package/fjs/types/function/compare/types.js +0 -6
  543. package/fjs/types/function/operator/types.js +0 -6
  544. package/fjs/types/function/types.js +0 -6
  545. package/fjs/types/list/types.js +0 -6
  546. package/fjs/types/nibble_set/types.js +0 -6
  547. package/fjs/types/nominal/types.js +0 -6
  548. package/fjs/types/nullable/types.js +0 -6
  549. package/fjs/types/object/types.js +0 -8
  550. package/fjs/types/option/types.js +0 -6
  551. package/fjs/types/ordered_map/types.js +0 -6
  552. package/fjs/types/patricia_trie/types.js +0 -6
  553. package/fjs/types/phantom/types.js +0 -11
  554. package/fjs/types/prime_field/types.js +0 -6
  555. package/fjs/types/range/types.js +0 -6
  556. package/fjs/types/range_map/types.js +0 -6
  557. package/fjs/types/result/types.js +0 -6
  558. package/fjs/types/rtti/common/types.js +0 -1
  559. package/fjs/types/rtti/parse/types.js +0 -1
  560. package/fjs/types/rtti/ts/types.js +0 -1
  561. package/fjs/types/rtti/types.js +0 -1
  562. package/fjs/types/rtti/validate/module.f.d.mts +0 -6
  563. package/fjs/types/rtti/validate/module.f.mjs +0 -169
  564. package/fjs/types/rtti/validate/proof.f.d.mts +0 -125
  565. package/fjs/types/rtti/validate/proof.f.mjs +0 -437
  566. package/fjs/types/rtti/validate/types.d.ts +0 -6
  567. package/fjs/types/rtti/validate/types.js +0 -1
  568. package/fjs/types/sorted_list/types.js +0 -6
  569. package/fjs/types/sorted_set/types.js +0 -6
  570. package/fjs/types/string_set/types.js +0 -6
  571. package/fjs/types/ts/types.js +0 -8
@@ -2,7 +2,7 @@
2
2
  * stdio transport for JSON-RPC / MCP servers.
3
3
  *
4
4
  * `stdioTransport` wraps a step function — the `mcpStep`-shaped
5
- * `(value) => Effect<O, Response | null>` from `fjs/protocol/mcp/module.f.mjs` — in the
5
+ * `(value) => Effect<O, Response | null, never>` from `fjs/protocol/mcp/module.f.mjs` — in the
6
6
  * canonical read → parse → dispatch → write loop, expressed as a recursive
7
7
  * effect so it stays in the pure effect model and is fully testable against a
8
8
  * mock stdin / stdout (see `fjs/effects/node/virtual`) with no real process.
@@ -29,26 +29,20 @@
29
29
  *
30
30
  * @module
31
31
  *
32
- * @import { Unknown } from '../../../media/json/types.ts'
33
- * @import { Effect, Operation } from '../../../effects/types.ts'
34
- * @import { IoResult, Read, Write } from '../../../effects/node/types.ts'
32
+ * @import { Operation } from '../../../effects/types.ts'
33
+ * @import { IoChannel, Read, Write } from '../../../effects/node/types.ts'
34
+ * @import { Effect } from '../../../effects/types.ts'
35
35
  * @import { Response } from '../../json_rpc/types.ts'
36
+ * @import { Step } from './types.ts'
36
37
  */
37
38
 
38
- import { pure, step } from '../../../effects/module.f.mjs'
39
- import { readLine, write } from '../../../effects/node/module.f.mjs'
39
+ import { pureError, pureOk, resultStep, step } from '../../../effects/module.f.mjs'
40
+ import { ioError, readLine, write } from '../../../effects/node/module.f.mjs'
40
41
  import { tryUtf8 } from '../../../text/module.f.mjs'
41
42
  import { parse, stringify } from '../../../media/json/module.f.mjs'
42
43
  import { sort } from '../../../types/object/module.f.mjs'
43
44
  import { internalError, jsonrpc, parseError } from '../../json_rpc/module.f.mjs'
44
- import { error, ok } from '../../../types/result/module.f.mjs'
45
-
46
- /**
47
- * A transport step: maps one parsed JSON-RPC message to a response, or `null`
48
- * for a notification that needs no reply. The shape of `mcpStep(config)(handlers)(key)`.
49
- * @template {Operation} O
50
- * @typedef {(value: Unknown) => Effect<O, Response | null>} Step
51
- */
45
+ import { error } from '../../../types/result/module.f.mjs'
52
46
 
53
47
  const stringifyJson = stringify(sort)
54
48
 
@@ -62,16 +56,13 @@ const parseErrorResponse = { jsonrpc, error: parseError, id: null }
62
56
  const internalErrorResponse = id => ({ jsonrpc, error: internalError, id })
63
57
 
64
58
  /** Encodes a response as a newline-terminated UTF-8 line and writes it to `stdout`.
65
- * @type {(resp: Response) => Effect<Write, IoResult<void>>}
59
+ * @type {(resp: Response) => Effect<Write, void, IoChannel>}
66
60
  */
67
61
  const writeResponse = resp => {
68
62
  const v = tryUtf8(stringifyJson(resp) + '\n')
69
63
  return v === null
70
- ? pure(error(undefined))
71
- : step(
72
- write('stdout', v),
73
- () => pure(ok(undefined)),
74
- )
64
+ ? pureError(ioError({ message: 'response does not encode as UTF-8' }))
65
+ : write('stdout', v)
75
66
  }
76
67
 
77
68
  /**
@@ -80,35 +71,48 @@ const writeResponse = resp => {
80
71
  * Recurses after each handled line; terminates (resolving to `void`) when
81
72
  * `readLine` reports EOF.
82
73
  *
74
+ * A transport that cannot read its own input has no fallback to choose, but it
75
+ * does not have to decide that here: the failure ends the loop and travels to
76
+ * whoever started the server, which for `fjs mcp` is a message on `stderr` and
77
+ * exit `1`. EOF is not that — `readLine` answers `ok(null)`, the loop ends, and
78
+ * the server has done its job.
79
+ *
83
80
  * @template {Operation} O
84
81
  * @param {Step<O>} handler
85
- * @returns {Effect<Read | Write | O, void>}
82
+ * @returns {Effect<Read | Write | O, void, IoChannel>}
86
83
  */
87
84
  export const stdioTransport = handler =>
88
85
  step(
89
86
  readLine('stdin'),
90
87
  line => line === null
91
- ? pure(undefined)
88
+ ? pureOk(undefined)
92
89
  : handleLine(handler)(line),
93
90
  )
94
91
 
95
92
  /**
96
93
  * @template {Operation} O
97
94
  * @param {Step<O>} handler
98
- * @returns {(line: string) => Effect<Read | Write | O, void>}
95
+ * @returns {(line: string) => Effect<Read | Write | O, void, IoChannel>}
99
96
  */
100
97
  const handleLine = handler => line => {
101
98
  const [t, value] = parse(line)
102
- return step(
99
+ return resultStep(
103
100
  t === 'error'
104
101
  ? writeResponse(parseErrorResponse)
102
+ // `step`, because a `Handle` answers `Effect<O, Response | null,
103
+ // never>` — it absorbs its own failures into the response body — so
104
+ // the continuation receives the response itself and there is no
105
+ // error branch left for this chain to consider.
105
106
  : step(
106
107
  handler(value),
107
108
  resp => resp === null
108
- ? pure(undefined)
109
- : step(
109
+ ? pureOk(undefined)
110
+ // `resultStep` from here down: each write's *failure* is
111
+ // what selects the next, smaller fallback, so these are the
112
+ // both-branches case rather than a chain to short-circuit.
113
+ : resultStep(
110
114
  writeResponse(resp),
111
- ([t2]) => t2 === 'error'
115
+ r2 => r2[0] === 'error'
112
116
  // The real response didn't fit. Retry with a fixed, small
113
117
  // internal-error body carrying `resp.id` — but a
114
118
  // caller-controlled `id` (e.g. a very large string) can
@@ -116,17 +120,19 @@ const handleLine = handler => line => {
116
120
  // that retry is bounded by one more: an `id: null`
117
121
  // internal-error, whose fully-constant shape is the only
118
122
  // line in this transport guaranteed to always encode.
119
- ? step(
123
+ ? resultStep(
120
124
  writeResponse(internalErrorResponse(resp.id)),
121
- ([t3]) => t3 === 'error'
122
- ? step(
125
+ r3 => r3[0] === 'error'
126
+ ? resultStep(
123
127
  writeResponse(internalErrorResponse(null)),
124
- () => pure(undefined),
128
+ () => pureOk(undefined),
125
129
  )
126
- : pure(undefined)
130
+ : pureOk(undefined)
127
131
  )
128
- : pure(undefined)),
132
+ : pureOk(undefined)),
129
133
  ),
134
+ // The loop continues whatever the line's own handling answered: a
135
+ // transport that could not write one response still serves the next.
130
136
  () => stdioTransport(handler),
131
137
  )
132
138
  }
@@ -1,11 +1,13 @@
1
1
  /**
2
2
  * @import { Unknown } from '../../../media/json/types.ts'
3
- * @import { Effect } from '../../../effects/types.ts'
4
3
  * @import { State } from '../../../effects/node/virtual/types.ts'
5
- * @import { Id, Response } from '../../json_rpc/types.ts'
6
- * @import { Step } from './module.f.mjs'
4
+ * @import { Id } from '../../json_rpc/types.ts'
5
+ * @import { Step } from './types.ts'
6
+ * @import { Read, Write } from '../../../effects/node/types.ts'
7
7
  */
8
8
  export declare const proof: {
9
+ readFailurePropagates: () => void;
10
+ readFailureAfterALinePropagates: () => void;
9
11
  eofImmediately: () => void;
10
12
  requestWritesResponse: () => void;
11
13
  requestWithoutTrailingNewline: () => void;
@@ -1,13 +1,14 @@
1
1
  /**
2
2
  * @import { Unknown } from '../../../media/json/types.ts'
3
- * @import { Effect } from '../../../effects/types.ts'
4
3
  * @import { State } from '../../../effects/node/virtual/types.ts'
5
- * @import { Id, Response } from '../../json_rpc/types.ts'
6
- * @import { Step } from './module.f.mjs'
4
+ * @import { Id } from '../../json_rpc/types.ts'
5
+ * @import { Step } from './types.ts'
6
+ * @import { Read, Write } from '../../../effects/node/types.ts'
7
7
  */
8
8
 
9
- import { assertEq } from '../../../asserts/module.f.mjs'
9
+ import { assert, assertEq } from '../../../asserts/module.f.mjs'
10
10
  import { pure } from '../../../effects/module.f.mjs'
11
+ import { pureOk } from '../../../effects/module.f.mjs'
11
12
  import { emptyState, virtual } from '../../../effects/node/virtual/module.f.mjs'
12
13
  import { stringify } from '../../../media/json/module.f.mjs'
13
14
  import { utf8 } from '../../../text/module.f.mjs'
@@ -16,6 +17,8 @@ import { maxLengthBytes } from '../../../types/bit_vec/module.f.mjs'
16
17
  import { sort } from '../../../types/object/module.f.mjs'
17
18
  import { internalError, jsonrpc, parseError } from '../../json_rpc/module.f.mjs'
18
19
  import { stdioTransport } from './module.f.mjs'
20
+ import { run as mockRun } from '../../../effects/mock/module.f.mjs'
21
+ import { error, ok } from '../../../types/result/module.f.mjs'
19
22
 
20
23
  const stringifyJson = stringify(sort)
21
24
 
@@ -32,7 +35,7 @@ const idOf = value =>
32
35
  /** @type {Step<never>} */
33
36
  const echoStep = value => {
34
37
  const id = idOf(value)
35
- return pure(id === undefined
38
+ return pureOk(id === undefined
36
39
  ? null
37
40
  : { jsonrpc, result: { ok: true }, id })
38
41
  }
@@ -51,15 +54,15 @@ const run = runStep(echoStep)
51
54
 
52
55
  /** @type {(id: Id) => string} */
53
56
  const okResponse = id =>
54
- stringifyJson(/** @type {Unknown} */ ({ jsonrpc, result: { ok: true }, id })) + '\n'
57
+ stringifyJson({ jsonrpc, result: { ok: true }, id }) + '\n'
55
58
 
56
59
  /** @type {string} */
57
60
  const parseErrorLine =
58
- stringifyJson(/** @type {Unknown} */ ({ jsonrpc, error: parseError, id: null })) + '\n'
61
+ stringifyJson({ jsonrpc, error: parseError, id: null }) + '\n'
59
62
 
60
63
  /** @type {(id: Id) => string} */
61
64
  const internalErrorLine = id =>
62
- stringifyJson(/** @type {Unknown} */ ({ jsonrpc, error: internalError, id })) + '\n'
65
+ stringifyJson({ jsonrpc, error: internalError, id }) + '\n'
63
66
 
64
67
  /** @type {(id: number) => string} */
65
68
  const ping = id => `{"jsonrpc":"2.0","method":"ping","id":${id}}`
@@ -71,6 +74,36 @@ const oversizedString = 'a'.repeat(Number(maxLengthBytes) + 1)
71
74
  const notification = '{"jsonrpc":"2.0","method":"notifications/initialized"}'
72
75
 
73
76
  export const proof = {
77
+ // A stdin that cannot be read ends the loop and hands the failure back,
78
+ // where it used to panic. EOF is not this case: that is `ok(null)`, and
79
+ // `eofImmediately` above pins it as the clean shutdown it should be.
80
+ readFailurePropagates: () => {
81
+ const runner = mockRun(/** @type {Parameters<typeof mockRun<Read | Write, undefined>>[0]} */ ({
82
+ read: () => (/** @type {undefined} */ s) => [s, error(/** @type {const} */ (['notImplemented', 'read']))],
83
+ write: () => (/** @type {undefined} */ s) => [s, ok(undefined)],
84
+ }))
85
+ const [, result] = runner(undefined)(stdioTransport(echoStep))
86
+ assert(result[0] === 'error', result)
87
+ },
88
+
89
+ // The same, one turn of the loop later. The proof above only reaches the
90
+ // *first* read, so a tail that swallowed the failure on recursion would
91
+ // still pass it: here stdin yields one complete line, the handler answers
92
+ // it, and the read after that fails.
93
+ readFailureAfterALinePropagates: () => {
94
+ const bytes = toBytes(ping(1) + '\n')
95
+ const runner = mockRun(/** @type {Parameters<typeof mockRun<Read | Write, readonly number[]>>[0]} */ ({
96
+ read: () => (/** @type {readonly number[]} */ s) =>
97
+ s.length === 0
98
+ ? [s, error(/** @type {const} */ (['notImplemented', 'read']))]
99
+ : [s.slice(1), ok(s[0])],
100
+ write: () => (/** @type {readonly number[]} */ s) => [s, ok(undefined)],
101
+ }))
102
+ const [rest, result] = runner(bytes)(stdioTransport(echoStep))
103
+ assertEq(rest.length, 0, 'expected the line to be consumed before the failure')
104
+ assert(result[0] === 'error', result)
105
+ },
106
+
74
107
  // EOF on the very first read: clean shutdown, nothing written, no further reads.
75
108
  eofImmediately: () => {
76
109
  const state = run('')
@@ -120,9 +153,9 @@ export const proof = {
120
153
  /** @type {Step<never>} */
121
154
  const step = value => {
122
155
  const id = idOf(value)
123
- return pure(id === undefined
156
+ return pureOk(id === undefined
124
157
  ? null
125
- : /** @type {Response} */ (/** @type {unknown} */ ({ jsonrpc, result: { ok: true, nextCursor: undefined }, id })))
158
+ : { jsonrpc, result: { ok: true, nextCursor: undefined }, id })
126
159
  }
127
160
  const state = runStep(step)(ping(1) + '\n')
128
161
  assertEq(state.stdout, okResponse(1))
@@ -137,7 +170,7 @@ export const proof = {
137
170
  /** @type {Step<never>} */
138
171
  const step = value => {
139
172
  const id = idOf(value)
140
- return pure(id === undefined
173
+ return pureOk(id === undefined
141
174
  ? null
142
175
  : { jsonrpc, result: { big: oversizedString }, id })
143
176
  }
@@ -151,7 +184,7 @@ export const proof = {
151
184
  /** @type {Step<never>} */
152
185
  const step = value => {
153
186
  const id = idOf(value)
154
- return pure(id === undefined
187
+ return pureOk(id === undefined
155
188
  ? null
156
189
  : id === 1
157
190
  ? { jsonrpc, result: { big: oversizedString }, id }
@@ -171,7 +204,7 @@ export const proof = {
171
204
  /** @type {Step<never>} */
172
205
  const step = value => {
173
206
  const id = idOf(value)
174
- return pure(id === undefined
207
+ return pureOk(id === undefined
175
208
  ? null
176
209
  : { jsonrpc, result: { ok: true }, id: oversizedString })
177
210
  }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Types for the stdio transport of JSON-RPC / MCP servers.
3
+ *
4
+ * @module
5
+ */
6
+ import type { Unknown } from '../../../media/json/types.ts';
7
+ import type { Effect, Operation } from '../../../effects/types.ts';
8
+ import type { Response } from '../../json_rpc/types.ts';
9
+ /**
10
+ * A transport step: maps one parsed JSON-RPC message to a response, or `null`
11
+ * for a notification that needs no reply. The shape of
12
+ * `mcpStep(config)(handlers)(key)`.
13
+ */
14
+ export type Step<O extends Operation> = (value: Unknown) => Effect<O, Response | null, never>;
@@ -7,7 +7,7 @@
7
7
  */
8
8
  import type { Ts } from '../../types/rtti/ts/types.ts';
9
9
  import type { Unknown } from '../../media/json/types.ts';
10
- import type { Operation, Effect } from '../../effects/types.ts';
10
+ import type { Effect, Operation } from '../../effects/types.ts';
11
11
  import type { Type } from '../../types/rtti/types.ts';
12
12
  import type { Response } from '../json_rpc/types.ts';
13
13
  import type { implementation, serverCapabilities, initializeParams, initializeResult, textContent, blobResource, embeddedResource, contentItem, tool, toolsListParams, toolsListResult, toolsCallParams, toolsCallResult } from './module.f.mjs';
@@ -26,8 +26,8 @@ export type ToolsCallParams = Ts<typeof toolsCallParams>;
26
26
  export type ToolsCallResult = Ts<typeof toolsCallResult>;
27
27
  /** Per-method handlers for a hello-world MCP tool server. */
28
28
  export type McpHandlers<O extends Operation> = {
29
- readonly toolsList: (params: ToolsListParams) => Effect<O, ToolsListResult>;
30
- readonly toolsCall: (params: ToolsCallParams) => Effect<O, ToolsCallResult>;
29
+ readonly toolsList: (params: ToolsListParams) => Effect<O, ToolsListResult, never>;
30
+ readonly toolsCall: (params: ToolsCallParams) => Effect<O, ToolsCallResult, never>;
31
31
  };
32
32
  /**
33
33
  * A single declarative tool entry combining metadata, input schema, and type-safe handler.
@@ -39,10 +39,21 @@ export type ToolEntry<O extends Operation> = {
39
39
  readonly name: string;
40
40
  readonly description: string;
41
41
  readonly inputRtti: Type;
42
- readonly handle: (args: Unknown) => Effect<O, ToolsCallResult>;
42
+ readonly handle: (args: Unknown) => Effect<O, ToolsCallResult, never>;
43
43
  };
44
- /** Top-level handler: maps a raw JSON value to a JSON-RPC response (or `null` for notifications). */
45
- export type Handle<O extends Operation> = (value: Unknown) => Effect<O, Response | null>;
44
+ /**
45
+ * A JSON-RPC step: given a decoded message, produce the response to write, or
46
+ * `null` for a notification.
47
+ *
48
+ * **`never` is a claim, not an absence.** The handler behind this does perform
49
+ * effects and they can fail — a session-state read is dispatched by a runner
50
+ * that may decline it. It says `never` because it has *absorbed* those: a
51
+ * request's failure becomes `_errResponse(id)(internalError)` and a
52
+ * notification's is dropped, there being no frame to put it in. Spelling that
53
+ * as `Effect<…, never>` puts the decision in the type where a reader can
54
+ * disagree with it, which an opaque payload could not.
55
+ */
56
+ export type Handle<O extends Operation> = (value: Unknown) => Effect<O, Response | null, never>;
46
57
  /** State carried before the peer sends `initialize`. */
47
58
  export type Uninitialized = readonly ['uninitialized'];
48
59
  /** State after `initialize` response was sent but before `notifications/initialized` arrives. */
@@ -5,6 +5,10 @@
5
5
  * See `./types.ts` for the `Id` type.
6
6
  *
7
7
  * @module
8
+ *
9
+ * @import { Vec } from '../../types/bit_vec/types.ts'
10
+ * @import { V8 } from '../../crypto/sha2/types.ts'
11
+ * @import { Id } from './types.ts'
8
12
  */
9
13
  import type { Vec } from '../../types/bit_vec/types.ts';
10
14
  import type { Id } from './types.ts';
@@ -5,21 +5,21 @@
5
5
  * See `./types.ts` for the `Id` type.
6
6
  *
7
7
  * @module
8
+ *
9
+ * @import { Vec } from '../../types/bit_vec/types.ts'
10
+ * @import { V8 } from '../../crypto/sha2/types.ts'
11
+ * @import { Id } from './types.ts'
8
12
  */
9
13
 
10
14
  import { toArray } from '../../types/list/module.f.mjs'
11
- /** @import { Vec } from '../../types/bit_vec/types.ts' */
12
15
  import { length, msb, uint, uintChunkList, unpack, vec } from '../../types/bit_vec/module.f.mjs'
13
- import { assertEq } from '../../asserts/module.f.mjs'
16
+ import { assertEq, assertNotNullish } from '../../asserts/module.f.mjs'
14
17
  import { utf8 } from '../../text/module.f.mjs'
15
- /** @import { Point2D } from '../../crypto/secp/types.ts' */
16
18
  import { secp256r1 } from '../../crypto/secp/module.f.mjs'
17
- /** @import { V8 } from '../../crypto/sha2/types.ts' */
18
19
  import { base32 } from '../../crypto/sha2/module.f.mjs'
19
20
  import { literal3ToVec } from '../level/literal/module.f.mjs'
20
21
  import { log2 } from '../../types/bigint/module.f.mjs'
21
22
  import { asBase, asNominal } from '../../types/nominal/module.f.mjs'
22
- /** @import { Id } from './types.ts' */
23
23
 
24
24
  // 32 bytes = 256 bits.
25
25
  //
@@ -32,7 +32,7 @@ const utf8IvSeed = utf8(ivSeed)
32
32
  const c = secp256r1
33
33
 
34
34
  /** @type {bigint} */
35
- const ivUint = /** @type {Point2D} */ (c.mul(uint(utf8IvSeed))(c.g))[0]
35
+ const ivUint = assertNotNullish(c.mul(uint(utf8IvSeed))(c.g))[0]
36
36
 
37
37
  // 64 hex = 256 bits = 32 bytes:
38
38
  assertEq(
@@ -3,10 +3,13 @@
3
3
  * See `./types.ts` for the `Add`/`EncodeState` type-level API.
4
4
  *
5
5
  * @module
6
+ *
7
+ * @import { Create } from '../../../types/patricia_trie/types.ts'
8
+ * @import { Id } from '../../id/types.ts'
9
+ * @import { Add, EncodeState } from './types.ts'
6
10
  */
7
11
  import type { Id } from '../../id/types.ts';
8
12
  import type { Add, EncodeState } from './types.ts';
9
- /** @import { Add, EncodeState } from './types.ts' */
10
13
  /**
11
14
  * Returns a streaming encoder for hash-level symbols.
12
15
  *
@@ -3,14 +3,16 @@
3
3
  * See `./types.ts` for the `Add`/`EncodeState` type-level API.
4
4
  *
5
5
  * @module
6
+ *
7
+ * @import { Create } from '../../../types/patricia_trie/types.ts'
8
+ * @import { Id } from '../../id/types.ts'
9
+ * @import { Add, EncodeState } from './types.ts'
6
10
  */
7
11
 
8
- /** @import { Create } from '../../../types/patricia_trie/types.ts' */
12
+ import { assertNotNullish } from '../../../asserts/module.f.mjs'
9
13
  import { emptyState, patriciaTrie } from '../../../types/patricia_trie/module.f.mjs'
10
14
  import { compress } from '../../id/module.f.mjs'
11
- /** @import { Id } from '../../id/types.ts' */
12
15
  import { asBase } from '../../../types/nominal/module.f.mjs'
13
- /** @import { Add, EncodeState } from './types.ts' */
14
16
 
15
17
  /**
16
18
  * Returns a streaming encoder for hash-level symbols.
@@ -48,7 +50,7 @@ export const encode =
48
50
  return [undefined, push([asBase(symbol), symbol], state)]
49
51
  }
50
52
  const [root1, storage1] = end(state)
51
- const [root2, storage2] = rootCreate(/** @type {Id} */ (root1), symbol, storage1)
53
+ const [root2, storage2] = rootCreate(assertNotNullish(root1), symbol, storage1)
52
54
  return [root2, [storage2, []]]
53
55
  }
54
56
  }
@@ -1,3 +1,7 @@
1
+ /**
2
+ * @import { Id } from '../../id/types.ts'
3
+ * @import { EncodeState } from './types.ts'
4
+ */
1
5
  import type { Id } from '../../id/types.ts';
2
6
  export type _NodeList = readonly (readonly [Id, Id, Id, boolean])[];
3
7
  export declare const proof: {
@@ -1,8 +1,11 @@
1
- import { assert, assertEq } from '../../../asserts/module.f.mjs'
1
+ /**
2
+ * @import { Id } from '../../id/types.ts'
3
+ * @import { EncodeState } from './types.ts'
4
+ */
5
+
6
+ import { assert, assertEq, assertNotNullish } from '../../../asserts/module.f.mjs'
2
7
  import { compress, level3Id } from '../../id/module.f.mjs'
3
- /** @import { Id } from '../../id/types.ts' */
4
8
  import { emptyEncodeState, encode } from './module.f.mjs'
5
- /** @import { EncodeState } from './types.ts' */
6
9
 
7
10
  /** @typedef {readonly (readonly [Id, Id, Id, boolean])[]} _NodeList */
8
11
 
@@ -77,7 +80,7 @@ export const proof = {
77
80
  // Output equals the merged value in the last add call
78
81
  output_is_last_add: () => {
79
82
  const [out, storage] = runWord([s1, s0, s1])
80
- assertEq(out, /** @type {_NodeList[number]} */ (storage.at(-1))[2])
83
+ assertEq(out, assertNotNullish(storage.at(-1))[2])
81
84
  },
82
85
 
83
86
  // Stack is empty after flush; storage is preserved
@@ -4,11 +4,14 @@
4
4
  * `Word`/`EncodeState`/`Level`/`PipelineState`/`LiteralToVec` type-level API.
5
5
  *
6
6
  * @module
7
+ *
8
+ * @import { Equal, StateScan } from '../../../types/function/operator/types.ts'
9
+ * @import { List } from '../../../types/list/types.ts'
10
+ * @import { EncodeState, Level, LiteralToVec, PipelineState } from './types.ts'
7
11
  */
8
12
  import type { Equal, StateScan } from '../../../types/function/operator/types.ts';
9
13
  import type { List } from '../../../types/list/types.ts';
10
14
  import type { EncodeState, Level, LiteralToVec, PipelineState } from './types.ts';
11
- /** @import { EncodeState, Level, LiteralToVec, PipelineState } from './types.ts' */
12
15
  /** @type {(s: bigint) => string} */
13
16
  export declare const symbolToString: (s: bigint) => string;
14
17
  /** @type {(word: List<bigint>) => string} */
@@ -4,16 +4,17 @@
4
4
  * `Word`/`EncodeState`/`Level`/`PipelineState`/`LiteralToVec` type-level API.
5
5
  *
6
6
  * @module
7
+ *
8
+ * @import { Equal, StateScan } from '../../../types/function/operator/types.ts'
9
+ * @import { List } from '../../../types/list/types.ts'
10
+ * @import { EncodeState, Level, LiteralToVec, PipelineState } from './types.ts'
7
11
  */
8
12
 
9
13
  import { log2 } from '../../../types/bigint/module.f.mjs'
10
14
  import { msb, vec } from '../../../types/bit_vec/module.f.mjs'
11
- /** @import { Equal, StateScan } from '../../../types/function/operator/types.ts' */
12
15
  import { strictEqual } from '../../../types/function/operator/module.f.mjs'
13
- /** @import { List } from '../../../types/list/types.ts' */
14
16
  import { equal, map } from '../../../types/list/module.f.mjs'
15
17
  import { join } from '../../../types/string/module.f.mjs'
16
- /** @import { EncodeState, Level, LiteralToVec, PipelineState } from './types.ts' */
17
18
 
18
19
  /** @type {(s: bigint) => string} */
19
20
  export const symbolToString = s => s.toString(16)
@@ -1,3 +1,6 @@
1
+ /**
2
+ * @import { Vec } from '../../../types/bit_vec/types.ts'
3
+ */
1
4
  export declare const proof: {
2
5
  x2: () => void;
3
6
  x5: () => void;
@@ -1,4 +1,7 @@
1
- /** @import { Vec } from '../../../types/bit_vec/types.ts' */
1
+ /**
2
+ * @import { Vec } from '../../../types/bit_vec/types.ts'
3
+ */
4
+
2
5
  import { chunkList, msb, vec } from '../../../types/bit_vec/module.f.mjs'
3
6
  import { assert, assertEq } from '../../../asserts/module.f.mjs'
4
7
  import { map, stateScan, toArray } from '../../../types/list/module.f.mjs'
@@ -4,15 +4,17 @@
4
4
  * See `./types.ts` for the `EncodeState`/`Encode` type-level API.
5
5
  *
6
6
  * @module
7
+ *
8
+ * @import { Add } from './level/hash/types.ts'
9
+ * @import { Id } from './id/types.ts'
10
+ * @import { InternalState } from '../types/patricia_trie/types.ts'
11
+ * @import { EncodeState, Encode } from './types.ts'
7
12
  */
8
13
  import type { Add } from './level/hash/types.ts';
9
14
  import type { Id } from './id/types.ts';
10
15
  import type { InternalState } from '../types/patricia_trie/types.ts';
11
16
  import type { EncodeState, Encode } from './types.ts';
12
17
  export type _HashState = InternalState<Id>;
13
- /** @import { Id } from './id/types.ts' */
14
- /** @import { InternalState } from '../types/patricia_trie/types.ts' */
15
- /** @import { EncodeState, Encode } from './types.ts' */
16
18
  /** @typedef {InternalState<Id>} _HashState */
17
19
  /** @type {<S>(storage: S) => EncodeState<S>} */
18
20
  export declare const emptyEncodeState: <S>(storage: S) => EncodeState<S>;
@@ -4,15 +4,16 @@
4
4
  * See `./types.ts` for the `EncodeState`/`Encode` type-level API.
5
5
  *
6
6
  * @module
7
+ *
8
+ * @import { Add } from './level/hash/types.ts'
9
+ * @import { Id } from './id/types.ts'
10
+ * @import { InternalState } from '../types/patricia_trie/types.ts'
11
+ * @import { EncodeState, Encode } from './types.ts'
7
12
  */
8
13
 
9
14
  import { emptyPipelineState, pipelineStep } from './level/literal/module.f.mjs'
10
15
  import { encode as hashEncode } from './level/hash/module.f.mjs'
11
- /** @import { Add } from './level/hash/types.ts' */
12
16
  import { level3Id } from './id/module.f.mjs'
13
- /** @import { Id } from './id/types.ts' */
14
- /** @import { InternalState } from '../types/patricia_trie/types.ts' */
15
- /** @import { EncodeState, Encode } from './types.ts' */
16
17
 
17
18
  /** @typedef {InternalState<Id>} _HashState */
18
19
 
@@ -31,22 +32,27 @@ export const encode =
31
32
 
32
33
  /** @typedef {readonly [Id | undefined, S, readonly _HashState[]]} _CascadeResult */
33
34
 
34
- /** @type {(id0: Id, storage0: S, stacks0: readonly _HashState[]) => _CascadeResult} */
35
- const cascade = (id0, storage0, stacks0) => {
36
- let id = id0, storage = storage0, stacks = stacks0
37
- for (let index = 0; ; index++) {
38
- if (index >= stacks.length) {
39
- const [, [newStorage, newStack]] = step(id, [storage, []])
40
- return [id, newStorage, [...stacks, newStack]]
41
- }
42
- const [out, [newStorage, newStack]] = step(id, [storage, stacks[index]])
43
- stacks = [...stacks.slice(0, index), newStack, ...stacks.slice(index + 1)]
44
- storage = newStorage
45
- if (out === undefined) return [undefined, storage, stacks]
46
- id = out
35
+ // Recursive rather than a `for(;;)` loop: every exit is one of the two
36
+ // `return`s below, so a bare `for(;;)` picks up a phantom "loop falls
37
+ // through" branch that V8's coverage instrumentation can never mark
38
+ // taken there is no third way out to take it. Recursion has no such
39
+ // branch to begin with.
40
+ /** @type {(id: Id, storage: S, stacks: readonly _HashState[], index: number) => _CascadeResult} */
41
+ const cascadeFrom = (id, storage, stacks, index) => {
42
+ if (index >= stacks.length) {
43
+ const [, [newStorage, newStack]] = step(id, [storage, []])
44
+ return [id, newStorage, [...stacks, newStack]]
47
45
  }
46
+ const [out, [newStorage, newStack]] = step(id, [storage, stacks[index]])
47
+ const newStacks = [...stacks.slice(0, index), newStack, ...stacks.slice(index + 1)]
48
+ return out === undefined
49
+ ? [undefined, newStorage, newStacks]
50
+ : cascadeFrom(out, newStorage, newStacks, index + 1)
48
51
  }
49
52
 
53
+ /** @type {(id0: Id, storage0: S, stacks0: readonly _HashState[]) => _CascadeResult} */
54
+ const cascade = (id0, storage0, stacks0) => cascadeFrom(id0, storage0, stacks0, 0)
55
+
50
56
  /** @type {(bit: bigint, state: EncodeState<S>) => readonly [Id | undefined, EncodeState<S>]} */
51
57
  const literalStep = (bit, state) => {
52
58
  const [ps, storage, stacks] = state
@@ -1,3 +1,7 @@
1
+ /**
2
+ * @import { Id } from './id/types.ts'
3
+ * @import { Add } from './level/hash/types.ts'
4
+ */
1
5
  import type { Id } from './id/types.ts';
2
6
  export type _Merge = readonly [Id, Id, Id, boolean];
3
7
  export declare const proof: {