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
@@ -1,17 +1,35 @@
1
1
  /**
2
2
  * @import { Evo } from '../../cas/evo/types.ts'
3
3
  * @import { ToolEntry, ToolsCallResult } from '../../protocol/mcp/types.ts'
4
- * @import { Operation } from '../../effects/types.ts'
4
+ * @import { NotImplemented, Operation } from '../../effects/types.ts'
5
+ * @import { Result } from '../../types/result/types.ts'
6
+ * @import { State } from '../../effects/node/virtual/types.ts'
5
7
  */
6
8
 
7
9
  import { assert, assertEq } from '../../asserts/module.f.mjs'
8
10
  import { fileCas } from '../../cas/module.f.mjs'
9
11
  import { sha256 } from '../../crypto/sha2/module.f.mjs'
10
12
  import { emptyState, virtual } from '../../effects/node/virtual/module.f.mjs'
13
+ import { runPure } from '../../effects/module.f.mjs'
14
+ import { pureError } from '../../effects/module.f.mjs'
15
+ import { unwrap as unwrapResult } from '../../types/result/module.f.mjs'
11
16
  import { vec8 } from '../../types/bit_vec/module.f.mjs'
12
17
  import { vecToCBase32 } from '../../basen/cbase32/module.f.mjs'
13
18
  import { initEvo, evo } from '../../cas/evo/module.f.mjs'
14
- import { evoToolRegistry } from './module.f.mjs'
19
+ import { evoAddArgs, evoToolRegistry } from './module.f.mjs'
20
+ import { toJsonSchema } from '../../media/json/schema/module.f.mjs'
21
+ import { at } from '../../types/object/module.f.mjs'
22
+
23
+ /**
24
+ * Unwraps what a run answered, keeping the state beside it.
25
+ *
26
+ * These cases drive the tools against a virtual filesystem that always
27
+ * cooperates, so a channel failure here is a broken fixture rather than a case
28
+ * under test — and the unwrap is where that assumption is stated.
29
+ *
30
+ * @type {<T, E>(r: readonly [State, Result<T, E>]) => readonly [State, T]}
31
+ */
32
+ const unwrapRun = ([state, r]) => [state, unwrapResult(r)]
15
33
  import { parse as parseJson } from '../../media/json/module.f.mjs'
16
34
  import { array, string as rttiString } from '../../types/rtti/module.f.mjs'
17
35
  import { parse as rttiParse } from '../../types/rtti/parse/module.f.mjs'
@@ -30,17 +48,43 @@ const parseSubjects = rttiParse(array(rttiString))
30
48
  const findEntry = (registry, name) => {
31
49
  const entry = registry.find(e => e.name === name)
32
50
  assert(entry !== undefined, ['missing tool entry', name])
33
- return /** @type {ToolEntry<O>} */ (entry)
51
+ return entry
34
52
  }
35
53
 
36
54
  /** @type {(result: ToolsCallResult) => string} */
37
55
  const textOf = result => {
38
56
  const [item] = result.content
39
57
  assert(item.type === 'text', ['expected a text content item', item])
40
- return /** @type {{ text: string }} */ (item).text
58
+ return item.text
41
59
  }
42
60
 
43
61
  export const proof = {
62
+ // Every Evo tool answers a channel failure — a cache slot the runner
63
+ // cannot reach — as an ordinary `isError` result. The client asked a
64
+ // question the server could not answer, which is a tool-level failure,
65
+ // not a reason to take the server down.
66
+ channelFailureIsToolError: () => {
67
+ /** @type {NotImplemented} */
68
+ const boom = ['notImplemented', 'memRead']
69
+ /** @type {Evo<never>} */
70
+ const failing = {
71
+ list: () => pureError(boom),
72
+ head: () => pureError(boom),
73
+ add: () => pureError(boom),
74
+ revision: () => { throw 'unused' },
75
+ }
76
+ const registry = evoToolRegistry(failing)
77
+ for (const [name, args] of /** @type {const} */ ([
78
+ ['evo_list', {}],
79
+ ['evo_head', { subject: 'x' }],
80
+ ['evo_add', { parents: [] }],
81
+ ])) {
82
+ const [r] = runPure(findEntry(registry, name).handle(args))
83
+ const result = r === undefined ? undefined : r[1]
84
+ assert(result !== undefined && result.isError === true, ['expected isError', name, result])
85
+ assert(textOf(result).includes('memRead'), ['expected the command name in the message', name])
86
+ }
87
+ },
44
88
  toolNamesMatchTheDesign: () => {
45
89
  /** @type {Evo<never>} */
46
90
  const e = {
@@ -53,10 +97,10 @@ export const proof = {
53
97
  },
54
98
  evoListReflectsTheCache: () => {
55
99
  const c = fileCas(sha256)(home)
56
- const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
100
+ const [state0, cacheKey] = unwrapRun(virtual(emptyState)(initEvo(c)))
57
101
  const e = evo(c)(cacheKey)
58
102
  const entry = findEntry(evoToolRegistry(e), 'evo_list')
59
- const [, result] = virtual(state0)(entry.handle({}))
103
+ const [, [, result]] = virtual(state0)(entry.handle({}))
60
104
  assert(!result.isError)
61
105
  assertEq(textOf(result), '[]')
62
106
  },
@@ -67,14 +111,12 @@ export const proof = {
67
111
  // encoding preserves both exactly.
68
112
  evoListEncodesArbitrarySubjectsAsJson: () => {
69
113
  const c = fileCas(sha256)(home)
70
- const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
114
+ const [state0, cacheKey] = unwrapRun(virtual(emptyState)(initEvo(c)))
71
115
  const e = evo(c)(cacheKey)
72
- const [state1, addA] = virtual(state0)(e.add({ parents: [], subject: 'line one\nline two', snapshot: vecToCBase32(vec8(0x2an)) }))
73
- assert(addA[0] === 'ok', ['expected add ok', addA])
74
- const [state2, addB] = virtual(state1)(e.add({ parents: [], subject: '', snapshot: vecToCBase32(vec8(0x2bn)) }))
75
- assert(addB[0] === 'ok', ['expected add ok', addB])
116
+ const [state1] = unwrapRun(virtual(state0)(e.add({ parents: [], subject: 'line one\nline two', snapshot: vecToCBase32(vec8(0x2an)) })))
117
+ const [state2] = unwrapRun(virtual(state1)(e.add({ parents: [], subject: '', snapshot: vecToCBase32(vec8(0x2bn)) })))
76
118
  const entry = findEntry(evoToolRegistry(e), 'evo_list')
77
- const [, result] = virtual(state2)(entry.handle({}))
119
+ const [, [, result]] = virtual(state2)(entry.handle({}))
78
120
  assert(!result.isError)
79
121
  const subjects = unwrap(parseSubjects(unwrap(parseJson(textOf(result)))))
80
122
  assertEq(subjects.length, 2)
@@ -85,33 +127,32 @@ export const proof = {
85
127
  // omitted lists the active subjects, `true` the archived ones.
86
128
  evoListForwardsTheArchivedFilter: () => {
87
129
  const c = fileCas(sha256)(home)
88
- const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
130
+ const [state0, cacheKey] = unwrapRun(virtual(emptyState)(initEvo(c)))
89
131
  const e = evo(c)(cacheKey)
90
- const [state1, add] = virtual(state0)(e.add({ parents: [], subject: 'gone', snapshot: vecToCBase32(vec8(0x2cn)), archived: true }))
91
- assert(add[0] === 'ok', ['expected add ok', add])
132
+ const [state1] = unwrapRun(virtual(state0)(e.add({ parents: [], subject: 'gone', snapshot: vecToCBase32(vec8(0x2cn)), archived: true })))
92
133
  const entry = findEntry(evoToolRegistry(e), 'evo_list')
93
- const [state2, active] = virtual(state1)(entry.handle({}))
134
+ const [state2, [, active]] = virtual(state1)(entry.handle({}))
94
135
  assert(!active.isError)
95
136
  assertEq(textOf(active), '[]')
96
- const [, archived] = virtual(state2)(entry.handle({ archived: true }))
137
+ const [, [, archived]] = virtual(state2)(entry.handle({ archived: true }))
97
138
  assert(!archived.isError)
98
139
  assertEq(textOf(archived), '["gone"]')
99
140
  },
100
141
  evoHeadReflectsTheCache: () => {
101
142
  const c = fileCas(sha256)(home)
102
- const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
143
+ const [state0, cacheKey] = unwrapRun(virtual(emptyState)(initEvo(c)))
103
144
  const e = evo(c)(cacheKey)
104
145
  const entry = findEntry(evoToolRegistry(e), 'evo_head')
105
- const [, result] = virtual(state0)(entry.handle({ subject: 'nope' }))
146
+ const [, [, result]] = virtual(state0)(entry.handle({ subject: 'nope' }))
106
147
  assert(!result.isError)
107
148
  assertEq(textOf(result), '')
108
149
  },
109
150
  evoHeadMissingSubjectIsInvalidArguments: () => {
110
151
  const c = fileCas(sha256)(home)
111
- const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
152
+ const [state0, cacheKey] = unwrapRun(virtual(emptyState)(initEvo(c)))
112
153
  const e = evo(c)(cacheKey)
113
154
  const entry = findEntry(evoToolRegistry(e), 'evo_head')
114
- const [, result] = virtual(state0)(entry.handle({}))
155
+ const [, [, result]] = virtual(state0)(entry.handle({}))
115
156
  assertEq(result.isError, true)
116
157
  },
117
158
  // Covers evo_revision's success branch: the stored revision comes back as
@@ -119,13 +160,12 @@ export const proof = {
119
160
  // resolved `snapshot` included.
120
161
  evoRevisionReturnsRevisionJson: () => {
121
162
  const c = fileCas(sha256)(home)
122
- const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
163
+ const [state0, cacheKey] = unwrapRun(virtual(emptyState)(initEvo(c)))
123
164
  const e = evo(c)(cacheKey)
124
165
  const subject = vecToCBase32(vec8(0x3n))
125
- const [state1, added] = virtual(state0)(e.add({ parents: [], subject }))
126
- assert(added[0] === 'ok', ['expected add ok', added])
166
+ const [state1, added] = unwrapRun(virtual(state0)(e.add({ parents: [], subject })))
127
167
  const entry = findEntry(evoToolRegistry(e), 'evo_revision')
128
- const [, result] = virtual(state1)(entry.handle({ hash: added[1] }))
168
+ const [, [, result]] = virtual(state1)(entry.handle({ hash: added }))
129
169
  assert(!result.isError)
130
170
  assertEq(textOf(result), `{"subject":"${subject}","parents":[],"snapshot":"${subject}","generation":0}`)
131
171
  },
@@ -133,10 +173,10 @@ export const proof = {
133
173
  // store has nothing under) is surfaced as isError with the message.
134
174
  evoRevisionDomainErrorIsError: () => {
135
175
  const c = fileCas(sha256)(home)
136
- const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
176
+ const [state0, cacheKey] = unwrapRun(virtual(emptyState)(initEvo(c)))
137
177
  const e = evo(c)(cacheKey)
138
178
  const entry = findEntry(evoToolRegistry(e), 'evo_revision')
139
- const [, result] = virtual(state0)(entry.handle({ hash: vecToCBase32(vec8(0x4n)) }))
179
+ const [, [, result]] = virtual(state0)(entry.handle({ hash: vecToCBase32(vec8(0x4n)) }))
140
180
  assertEq(result.isError, true)
141
181
  assert(textOf(result).includes('revision not found'))
142
182
  },
@@ -144,22 +184,66 @@ export const proof = {
144
184
  // hash comes back as plain, non-error text.
145
185
  evoAddSuccessReturnsHash: () => {
146
186
  const c = fileCas(sha256)(home)
147
- const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
187
+ const [state0, cacheKey] = unwrapRun(virtual(emptyState)(initEvo(c)))
148
188
  const e = evo(c)(cacheKey)
149
189
  const entry = findEntry(evoToolRegistry(e), 'evo_add')
150
190
  const args = { parents: [], subject: 'doc', snapshot: vecToCBase32(vec8(0x1n)) }
151
- const [, result] = virtual(state0)(entry.handle(args))
191
+ const [, [, result]] = virtual(state0)(entry.handle(args))
152
192
  assert(!result.isError)
153
193
  assert(textOf(result).length > 0)
154
194
  },
195
+ // `evo_add` accepts a nested lock map and `evo_revision` gives it back —
196
+ // the two tools speak one recursive schema, so a revision read out can be
197
+ // added again as-is however deep its lock nests.
198
+ evoAddAndRevisionCarryNestedLocks: () => {
199
+ const c = fileCas(sha256)(home)
200
+ const [state0, cacheKey] = unwrapRun(virtual(emptyState)(initEvo(c)))
201
+ const e = evo(c)(cacheKey)
202
+ const registry = evoToolRegistry(e)
203
+ const snapshot = vecToCBase32(vec8(0x1n))
204
+ const d1 = vecToCBase32(vec8(0x2n))
205
+ const d2 = vecToCBase32(vec8(0x3n))
206
+ const args = {
207
+ parents: [], subject: 'doc', snapshot,
208
+ lock: { B: { D: d1 }, C: { D: d2 } },
209
+ }
210
+ const [state1, [, added]] = virtual(state0)(findEntry(registry, 'evo_add').handle(args))
211
+ assert(!added.isError)
212
+ const [, [, read]] = virtual(state1)(findEntry(registry, 'evo_revision').handle({ hash: textOf(added) }))
213
+ assert(!read.isError)
214
+ assertEq(
215
+ textOf(read),
216
+ `{"subject":"doc","parents":[],"snapshot":"${snapshot}","generation":0,"lock":{"B":{"D":"${d1}"},"C":{"D":"${d2}"}}}`)
217
+ },
218
+ // The advertised `inputSchema` publishes both halves of the format's
219
+ // `lock` field: either a shared-lock reference (a string) or an inline
220
+ // map, and the map's recursion the way JSON Schema expresses one — a named
221
+ // `$defs` rule reached through a local `$ref`, rather than a flat-only
222
+ // shape or an infinitely inlined one.
223
+ evoAddInputSchemaPublishesTheLockRecursion: () => {
224
+ const schema = toJsonSchema(evoAddArgs)
225
+ const lock = at('lock')(schema.properties ?? {})
226
+ assert(lock !== null, ['expected a lock property', schema])
227
+ const ref = '#/$defs/lockValue'
228
+ const [sharedRef, inlineMap] = lock.anyOf ?? []
229
+ assertEq(sharedRef?.type, 'string')
230
+ assertEq(inlineMap?.type, 'object')
231
+ assertEq(at('$ref')(inlineMap?.additionalProperties ?? {}), ref)
232
+ const rule = at('lockValue')(schema.$defs ?? {})
233
+ assert(rule !== null, ['expected a lockValue definition', schema])
234
+ const [directHash, nestedMap] = rule.anyOf ?? []
235
+ assertEq(directHash?.type, 'string')
236
+ assertEq(nestedMap?.type, 'object')
237
+ assertEq(at('$ref')(nestedMap?.additionalProperties ?? {}), ref)
238
+ },
155
239
  // Covers evo_add's error branch: a domain-level failure (Evo.add's
156
240
  // Result) is surfaced as isError with the failure message as text.
157
241
  evoAddDomainErrorIsError: () => {
158
242
  const c = fileCas(sha256)(home)
159
- const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
243
+ const [state0, cacheKey] = unwrapRun(virtual(emptyState)(initEvo(c)))
160
244
  const e = evo(c)(cacheKey)
161
245
  const entry = findEntry(evoToolRegistry(e), 'evo_add')
162
- const [, result] = virtual(state0)(entry.handle({ parents: [] }))
246
+ const [, [, result]] = virtual(state0)(entry.handle({ parents: [] }))
163
247
  assertEq(result.isError, true)
164
248
  assert(textOf(result).includes('subject is required'))
165
249
  },
@@ -1,11 +1,46 @@
1
+ /**
2
+ * The FJS MCP server: the composition root the `fjs mcp` / `m` CLI command
3
+ * runs. Session configuration (`McpConfig`), the top-level entry point
4
+ * (`casMcpServer`, wiring `mcpStep` + `stdioTransport` from
5
+ * `fjs/protocol/mcp/`), and the composed tool registry — nothing CAS- or
6
+ * Evo-specific lives here, it only knows about tool *registries*, not what is
7
+ * in them, so a future non-CAS tool set can land as a new sibling of
8
+ * `fjs/mcp/cas/` and `fjs/mcp/evo/` without touching either of them.
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,mimeType,type[,uri][,text\|blob]}` |
16
+ * | `cas_list` | `{}` | `c.list()` | hashes, one per line |
17
+ * | `evo_list` | `{ archived? }` | `e.list(...)` | subjects, as a JSON array of strings |
18
+ * | `evo_head` | `{ subject }` | `e.head(...)` | head hashes, one per line |
19
+ * | `evo_revision` | `{ hash }` | `e.revision(...)`| the revision, as JSON |
20
+ * | `evo_add` | `{ parents, snapshot?, subject?, archived? }` | `e.add(...)` | hash (cBase32) |
21
+ *
22
+ * `cas_add`/`cas_get`/`cas_list` are `fjs/mcp/cas` — see that module for tool
23
+ * documentation (input encoding, output shape, error convention). `evo_*` is
24
+ * `fjs/mcp/evo`. Both tool sets run in one process, sharing one `~/.cas/`
25
+ * store and one in-memory Evo cache scanned once at startup (`initEvo`).
26
+ *
27
+ * @module
28
+ *
29
+ * @import { Effect } from '../effects/types.ts'
30
+ * @import { MemOp } from '../effects/memory/types.ts'
31
+ * @import { IoChannel, Read, Write } from '../effects/node/types.ts'
32
+ * @import { McpConfig, McpHandlers } from '../protocol/mcp/types.ts'
33
+ * @import { FileCasOperation } from '../cas/types.ts'
34
+ * @import { Cache } from '../cas/evo/types.ts'
35
+ * @import { Key } from '../effects/memory/types.ts'
36
+ */
1
37
  import type { Effect } from '../effects/types.ts';
2
38
  import type { MemOp } from '../effects/memory/types.ts';
3
- import type { Read, Write } from '../effects/node/types.ts';
39
+ import type { IoChannel, Read, Write } from '../effects/node/types.ts';
4
40
  import type { McpConfig, McpHandlers } from '../protocol/mcp/types.ts';
5
41
  import type { FileCasOperation } from '../cas/types.ts';
6
42
  import type { Cache } from '../cas/evo/types.ts';
7
43
  import type { Key } from '../effects/memory/types.ts';
8
- /** @import { Key } from '../effects/memory/types.ts' */
9
44
  /**
10
45
  * MCP handlers for `FileCas` (`fjs/mcp/cas`) plus the Evo API (`fjs/mcp/evo`)
11
46
  * layered on it, bound to `home` and an already-built Evo cache slot (see
@@ -24,9 +59,9 @@ export declare const casConfig: McpConfig;
24
59
  * build the Evo subject/head cache (`initEvo`), allocates the session-state
25
60
  * slot, builds the `mcpStep` for the merged tool registry, and drives the
26
61
  * read → parse → dispatch → write loop until stdin EOF.
27
- * @type {(home: string) => Effect<Read | Write | MemOp | FileCasOperation, void>}
62
+ * @type {(home: string) => Effect<Read | Write | MemOp | FileCasOperation, void, IoChannel>}
28
63
  */
29
- export declare const casMcpServer: (home: string) => Effect<Read | Write | MemOp | FileCasOperation, void>;
64
+ export declare const casMcpServer: (home: string) => Effect<Read | Write | MemOp | FileCasOperation, void, IoChannel>;
30
65
  export declare const proof: {
31
66
  casMcpServer: () => void;
32
67
  };
@@ -25,25 +25,27 @@
25
25
  * store and one in-memory Evo cache scanned once at startup (`initEvo`).
26
26
  *
27
27
  * @module
28
+ *
29
+ * @import { Effect } from '../effects/types.ts'
30
+ * @import { MemOp } from '../effects/memory/types.ts'
31
+ * @import { IoChannel, Read, Write } from '../effects/node/types.ts'
32
+ * @import { McpConfig, McpHandlers } from '../protocol/mcp/types.ts'
33
+ * @import { FileCasOperation } from '../cas/types.ts'
34
+ * @import { Cache } from '../cas/evo/types.ts'
35
+ * @import { Key } from '../effects/memory/types.ts'
28
36
  */
29
- import { step } from '../effects/module.f.mjs'
30
- /** @import { Effect } from '../effects/types.ts' */
37
+
38
+ import { step as ioStep } from '../effects/module.f.mjs'
31
39
  import { create } from '../effects/memory/module.f.mjs'
32
- /** @import { MemOp } from '../effects/memory/types.ts' */
33
- /** @import { Read, Write } from '../effects/node/types.ts' */
34
40
  import { stdioTransport } from '../protocol/mcp/stdio/module.f.mjs'
35
41
  import {
36
42
  mcpStep, uninitializedState, fromRegistry,
37
43
  } from '../protocol/mcp/module.f.mjs'
38
- /** @import { McpConfig, McpHandlers } from '../protocol/mcp/types.ts' */
39
44
  import { fileCas } from '../cas/module.f.mjs'
40
- /** @import { FileCasOperation } from '../cas/types.ts' */
41
45
  import { initEvo, evo } from '../cas/evo/module.f.mjs'
42
- /** @import { Cache } from '../cas/evo/types.ts' */
43
46
  import { sha256 } from '../crypto/sha2/module.f.mjs'
44
47
  import { casToolRegistry } from './cas/module.f.mjs'
45
48
  import { evoToolRegistry } from './evo/module.f.mjs'
46
- /** @import { Key } from '../effects/memory/types.ts' */
47
49
 
48
50
  // ── Handlers ────────────────────────────────────────────────────────────────────
49
51
 
@@ -76,11 +78,11 @@ export const casConfig = {
76
78
  * build the Evo subject/head cache (`initEvo`), allocates the session-state
77
79
  * slot, builds the `mcpStep` for the merged tool registry, and drives the
78
80
  * read → parse → dispatch → write loop until stdin EOF.
79
- * @type {(home: string) => Effect<Read | Write | MemOp | FileCasOperation, void>}
81
+ * @type {(home: string) => Effect<Read | Write | MemOp | FileCasOperation, void, IoChannel>}
80
82
  */
81
- export const casMcpServer = home => step(
83
+ export const casMcpServer = home => ioStep(
82
84
  initEvo(fileCas(sha256)(home)),
83
- cacheKey => step(
85
+ cacheKey => ioStep(
84
86
  create(uninitializedState),
85
87
  sessionKey =>
86
88
  stdioTransport(mcpStep(casConfig)(casMcpHandlers(home)(cacheKey))(sessionKey)),
@@ -91,6 +93,6 @@ export const casMcpServer = home => step(
91
93
 
92
94
  export const proof = {
93
95
  // casMcpServer is never called in integration tests because it drives a
94
- // real stdio server; call it here to cover its Effect-building body.
96
+ // real stdio server; call it here to cover its effect-building body.
95
97
  casMcpServer: () => { casMcpServer('/') },
96
98
  }
@@ -1,4 +1,16 @@
1
- /** @import { Unknown } from '../media/json/types.ts' */
1
+ /**
2
+ * @import { Unknown } from '../media/json/types.ts'
3
+ * @import { Operation } from '../effects/types.ts'
4
+ * @import { Response } from '../protocol/json_rpc/types.ts'
5
+ * @import { Handle } from '../protocol/mcp/types.ts'
6
+ * @import { Vec } from '../types/bit_vec/types.ts'
7
+ * @import { FileCasOperation } from '../cas/types.ts'
8
+ * @import { List } from '../effects/list/types.ts'
9
+ * @import { Effect } from '../effects/types.ts'
10
+ * @import { ContentItem, ToolsCallResult } from '../protocol/mcp/types.ts'
11
+ * @import { IoChannel, Mkdir, Now, RandomInt, ReadBytes, Rename } from '../effects/node/types.ts'
12
+ * @import { Dir } from '../effects/node/virtual/types.ts'
13
+ */
2
14
  export declare const proof: {
3
15
  getMetaLargeMultiChunkBlobNoError: () => void;
4
16
  getMetaLargeMultiChunkUtf8Symbols: () => void;