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.
- package/README.md +5 -3
- package/fjs/asn.1/module.f.mjs +8 -1
- package/fjs/asn.1/proof.f.d.mts +15 -0
- package/fjs/asn.1/proof.f.mjs +31 -3
- package/fjs/asserts/module.f.d.mts +14 -0
- package/fjs/asserts/module.f.mjs +20 -0
- package/fjs/asserts/proof.f.d.mts +3 -0
- package/fjs/asserts/proof.f.mjs +15 -1
- package/fjs/basen/base128/module.f.mjs +22 -5
- package/fjs/basen/base128/proof.f.d.mts +3 -1
- package/fjs/basen/base128/proof.f.mjs +3 -1
- package/fjs/basen/base64/module.f.mjs +7 -3
- package/fjs/basen/base64/proof.f.d.mts +3 -1
- package/fjs/basen/base64/proof.f.mjs +7 -4
- package/fjs/basen/cbase32/proof.f.d.mts +3 -1
- package/fjs/basen/cbase32/proof.f.mjs +3 -1
- package/fjs/bnf/data/module.f.d.mts +32 -6
- package/fjs/bnf/data/module.f.mjs +112 -7
- package/fjs/bnf/data/proof.f.d.mts +2 -0
- package/fjs/bnf/data/proof.f.mjs +74 -4
- package/fjs/bnf/data/types.d.ts +20 -2
- package/fjs/bnf/descent/module.f.d.mts +34 -5
- package/fjs/bnf/descent/module.f.mjs +176 -54
- package/fjs/bnf/descent/proof.f.d.mts +3 -0
- package/fjs/bnf/descent/proof.f.mjs +189 -27
- package/fjs/bnf/descent/types.d.ts +24 -18
- package/fjs/bnf/ll1/module.f.d.mts +74 -6
- package/fjs/bnf/ll1/module.f.mjs +297 -95
- package/fjs/bnf/ll1/proof.f.d.mts +17 -2
- package/fjs/bnf/ll1/proof.f.mjs +372 -137
- package/fjs/bnf/ll1/types.d.ts +25 -27
- package/fjs/bnf/matcher/module.f.d.mts +66 -0
- package/fjs/bnf/matcher/module.f.mjs +81 -0
- package/fjs/bnf/matcher/proof.f.d.mts +10 -0
- package/fjs/bnf/matcher/proof.f.mjs +79 -0
- package/fjs/bnf/matcher/types.d.ts +54 -0
- package/fjs/bnf/module.f.d.mts +15 -6
- package/fjs/bnf/module.f.mjs +52 -11
- package/fjs/bnf/proof.f.d.mts +2 -0
- package/fjs/bnf/proof.f.mjs +79 -3
- package/fjs/bnf/testlib.f.d.mts +31 -0
- package/fjs/bnf/testlib.f.mjs +80 -0
- package/fjs/bnf/token_symbol/module.f.d.mts +4 -3
- package/fjs/bnf/token_symbol/module.f.mjs +7 -6
- package/fjs/bnf/token_symbol/proof.f.mjs +5 -2
- package/fjs/bnf/token_symbol/types.d.ts +2 -2
- package/fjs/bnf/types.d.ts +10 -3
- package/fjs/cas/cli/module.f.d.mts +1 -1
- package/fjs/cas/cli/module.f.mjs +14 -20
- package/fjs/cas/cli/proof.f.d.mts +4 -4
- package/fjs/cas/cli/proof.f.mjs +47 -34
- package/fjs/cas/evo/module.f.d.mts +71 -31
- package/fjs/cas/evo/module.f.mjs +223 -138
- package/fjs/cas/evo/proof.f.d.mts +10 -1
- package/fjs/cas/evo/proof.f.mjs +311 -226
- package/fjs/cas/evo/types.d.ts +45 -9
- package/fjs/cas/module.f.d.mts +18 -32
- package/fjs/cas/module.f.mjs +164 -176
- package/fjs/cas/proof.f.d.mts +11 -8
- package/fjs/cas/proof.f.mjs +259 -147
- package/fjs/cas/types.d.ts +24 -10
- package/fjs/ci/common/module.f.d.mts +1 -1
- package/fjs/ci/common/module.f.mjs +1 -0
- package/fjs/ci/config/module.f.d.mts +3 -3
- package/fjs/ci/config/module.f.mjs +3 -3
- package/fjs/ci/module.f.d.mts +5 -5
- package/fjs/ci/module.f.mjs +8 -7
- package/fjs/ci/nix/module.f.d.mts +7 -5
- package/fjs/ci/nix/module.f.mjs +13 -12
- package/fjs/ci/nix/proof.f.d.mts +2 -0
- package/fjs/ci/nix/proof.f.mjs +4 -4
- package/fjs/ci/proof.f.d.mts +4 -2
- package/fjs/ci/proof.f.mjs +13 -8
- package/fjs/cli/module.f.d.mts +4 -6
- package/fjs/cli/module.f.mjs +4 -8
- package/fjs/cli/proof.f.d.mts +4 -2
- package/fjs/cli/proof.f.mjs +21 -18
- package/fjs/cli/types.d.ts +2 -3
- package/fjs/common/monoid/module.f.d.mts +70 -12
- package/fjs/common/monoid/module.f.mjs +177 -14
- package/fjs/common/monoid/proof.f.d.mts +12 -1
- package/fjs/common/monoid/proof.f.mjs +88 -4
- package/fjs/common/monoid/types.d.ts +23 -0
- package/fjs/crypto/hmac/module.f.mjs +2 -2
- package/fjs/crypto/secp/proof.f.d.mts +3 -1
- package/fjs/crypto/secp/proof.f.mjs +3 -1
- package/fjs/crypto/sha2/module.f.mjs +3 -1
- package/fjs/crypto/sha2/proof.f.d.mts +4 -1
- package/fjs/crypto/sha2/proof.f.mjs +27 -1
- package/fjs/crypto/sha2/types.d.ts +11 -0
- package/fjs/crypto/sign/module.f.mjs +2 -2
- package/fjs/crypto/vdf/module.f.d.mts +23 -4
- package/fjs/crypto/vdf/module.f.mjs +6 -4
- package/fjs/dev/module.f.d.mts +17 -5
- package/fjs/dev/module.f.mjs +60 -30
- package/fjs/dev/update/module.f.d.mts +11 -3
- package/fjs/dev/update/module.f.mjs +16 -11
- package/fjs/dev/update/proof.f.d.mts +4 -3
- package/fjs/dev/update/proof.f.mjs +11 -7
- package/fjs/djs/module.f.d.mts +13 -5
- package/fjs/djs/module.f.mjs +31 -16
- package/fjs/djs/parser/module.f.d.mts +16 -3
- package/fjs/djs/parser/module.f.mjs +135 -16
- package/fjs/djs/parser/proof.f.d.mts +8 -1
- package/fjs/djs/parser/proof.f.mjs +287 -13
- package/fjs/djs/parser/types.d.ts +7 -1
- package/fjs/djs/proof.f.d.mts +20 -1
- package/fjs/djs/proof.f.mjs +190 -12
- package/fjs/djs/serializer/module.f.d.mts +25 -8
- package/fjs/djs/serializer/module.f.mjs +66 -19
- package/fjs/djs/serializer/proof.f.d.mts +5 -0
- package/fjs/djs/serializer/proof.f.mjs +23 -1
- package/fjs/djs/tokenizer/module.f.d.mts +17 -5
- package/fjs/djs/tokenizer/module.f.mjs +120 -73
- package/fjs/djs/tokenizer/proof.f.d.mts +3 -0
- package/fjs/djs/tokenizer/proof.f.mjs +86 -67
- package/fjs/djs/transpiler/module.f.d.mts +13 -19
- package/fjs/djs/transpiler/module.f.mjs +79 -72
- package/fjs/djs/transpiler/types.d.ts +29 -0
- package/fjs/djs/types.d.ts +7 -1
- package/fjs/effects/list/module.f.d.mts +23 -12
- package/fjs/effects/list/module.f.mjs +16 -12
- package/fjs/effects/list/types.d.ts +27 -7
- package/fjs/effects/memory/module.f.d.mts +6 -3
- package/fjs/effects/memory/module.f.mjs +7 -7
- package/fjs/effects/memory/proof.f.d.mts +4 -0
- package/fjs/effects/memory/proof.f.mjs +18 -9
- package/fjs/effects/memory/types.d.ts +4 -3
- package/fjs/effects/mock/module.f.d.mts +28 -4
- package/fjs/effects/mock/module.f.mjs +39 -5
- package/fjs/effects/mock/types.d.ts +10 -1
- package/fjs/effects/module.d.mts +12 -2
- package/fjs/effects/module.f.d.mts +469 -281
- package/fjs/effects/module.f.mjs +538 -299
- package/fjs/effects/module.mjs +11 -2
- package/fjs/effects/node/memory/module.d.mts +7 -2
- package/fjs/effects/node/memory/module.mjs +9 -5
- package/fjs/effects/node/memory/proof.d.mts +2 -0
- package/fjs/effects/node/memory/proof.mjs +12 -5
- package/fjs/effects/node/module.d.mts +8 -2
- package/fjs/effects/node/module.f.d.mts +183 -43
- package/fjs/effects/node/module.f.mjs +260 -62
- package/fjs/effects/node/module.mjs +61 -50
- package/fjs/effects/node/proof.f.d.mts +28 -2
- package/fjs/effects/node/proof.f.mjs +161 -42
- package/fjs/effects/node/types.d.ts +106 -18
- package/fjs/effects/node/virtual/module.f.d.mts +21 -4
- package/fjs/effects/node/virtual/module.f.mjs +113 -70
- package/fjs/effects/node/virtual/proof.f.d.mts +31 -2
- package/fjs/effects/node/virtual/proof.f.mjs +201 -8
- package/fjs/effects/proof.f.d.mts +69 -34
- package/fjs/effects/proof.f.mjs +413 -130
- package/fjs/effects/types.d.ts +161 -33
- package/fjs/emergent_testing/all.test.d.mts +8 -0
- package/fjs/emergent_testing/all.test.mjs +14 -0
- package/fjs/emergent_testing/module.f.d.mts +22 -10
- package/fjs/emergent_testing/module.f.mjs +119 -85
- package/fjs/emergent_testing/proof.f.d.mts +21 -7
- package/fjs/emergent_testing/proof.f.mjs +169 -35
- package/fjs/emergent_testing/types.d.ts +22 -4
- package/fjs/fsc/bnf.f.d.mts +3 -0
- package/fjs/fsc/bnf.f.mjs +4 -1
- package/fjs/fsc/json.f.d.mts +3 -0
- package/fjs/fsc/json.f.mjs +4 -1
- package/fjs/fsc/module.f.d.mts +9 -0
- package/fjs/fsc/module.f.mjs +5 -3
- package/fjs/fsm/module.f.d.mts +14 -4
- package/fjs/fsm/module.f.mjs +54 -37
- package/fjs/fsm/proof.f.d.mts +5 -0
- package/fjs/fsm/proof.f.mjs +87 -115
- package/fjs/js/keywords/module.f.d.mts +52 -0
- package/fjs/js/keywords/module.f.mjs +72 -0
- package/fjs/{emergent_testing/scenarios/return-value.pass.d.ts → js/keywords/proof.f.d.mts} +1 -1
- package/fjs/js/keywords/proof.f.mjs +13 -0
- package/fjs/js/tokenizer/module.f.d.mts +30 -3
- package/fjs/js/tokenizer/module.f.mjs +161 -211
- package/fjs/js/tokenizer/proof.f.d.mts +1 -0
- package/fjs/js/tokenizer/proof.f.mjs +54 -24
- package/fjs/js/tokenizer/types.d.ts +33 -24
- package/fjs/mcp/cas/module.f.d.mts +1 -6
- package/fjs/mcp/cas/module.f.mjs +55 -51
- package/fjs/mcp/cas/proof.f.d.mts +15 -0
- package/fjs/mcp/cas/proof.f.mjs +174 -0
- package/fjs/mcp/evo/module.f.d.mts +19 -10
- package/fjs/mcp/evo/module.f.mjs +48 -27
- package/fjs/mcp/evo/proof.f.d.mts +6 -1
- package/fjs/mcp/evo/proof.f.mjs +115 -31
- package/fjs/mcp/module.f.d.mts +39 -4
- package/fjs/mcp/module.f.mjs +14 -12
- package/fjs/mcp/proof.f.d.mts +13 -1
- package/fjs/mcp/proof.f.mjs +120 -61
- package/fjs/media/html/module.f.d.mts +12 -0
- package/fjs/media/html/module.f.mjs +7 -5
- package/fjs/media/html/proof.f.d.mts +3 -0
- package/fjs/media/html/proof.f.mjs +4 -1
- package/fjs/media/json/extended/module.f.d.mts +82 -0
- package/fjs/media/json/extended/module.f.mjs +153 -0
- package/fjs/media/json/extended/proof.f.d.mts +42 -0
- package/fjs/media/json/extended/proof.f.mjs +127 -0
- package/fjs/media/json/extended/types.d.ts +23 -0
- package/fjs/media/json/module.f.d.mts +8 -2
- package/fjs/media/json/module.f.mjs +43 -41
- package/fjs/media/json/number/module.f.d.mts +59 -0
- package/fjs/media/json/number/module.f.mjs +136 -0
- package/fjs/media/json/number/proof.f.d.mts +24 -0
- package/fjs/media/json/number/proof.f.mjs +86 -0
- package/fjs/media/json/number/types.d.ts +28 -0
- package/fjs/media/json/parser/module.f.d.mts +25 -13
- package/fjs/media/json/parser/module.f.mjs +133 -72
- package/fjs/media/json/parser/proof.f.d.mts +5 -0
- package/fjs/media/json/parser/proof.f.mjs +31 -1
- package/fjs/media/json/parser/types.d.ts +38 -14
- package/fjs/media/json/rtti/module.f.d.mts +1 -1
- package/fjs/media/json/rtti/module.f.mjs +1 -1
- package/fjs/media/json/rtti/proof.f.d.mts +3 -0
- package/fjs/media/json/rtti/proof.f.mjs +12 -12
- package/fjs/media/json/schema/module.f.d.mts +61 -27
- package/fjs/media/json/schema/module.f.mjs +218 -63
- package/fjs/media/json/schema/proof.f.d.mts +41 -1
- package/fjs/media/json/schema/proof.f.mjs +220 -9
- package/fjs/media/json/serializer/module.f.d.mts +44 -0
- package/fjs/media/json/serializer/module.f.mjs +71 -9
- package/fjs/media/json/tokenizer/module.f.d.mts +8 -0
- package/fjs/media/json/tokenizer/module.f.mjs +31 -8
- package/fjs/media/json/tokenizer/proof.f.d.mts +6 -0
- package/fjs/media/json/tokenizer/proof.f.mjs +62 -21
- package/fjs/media/json/types.d.ts +36 -10
- package/fjs/media/lock/module.f.d.mts +100 -0
- package/fjs/media/lock/module.f.mjs +125 -0
- package/fjs/media/lock/proof.f.d.mts +33 -0
- package/fjs/media/lock/proof.f.mjs +196 -0
- package/fjs/media/lock/types.d.ts +15 -0
- package/fjs/media/module.f.d.mts +6 -5
- package/fjs/media/module.f.mjs +8 -7
- package/fjs/media/nix/module.f.d.mts +13 -0
- package/fjs/media/nix/module.f.mjs +4 -2
- package/fjs/media/nix/proof.f.d.mts +3 -0
- package/fjs/media/nix/proof.f.mjs +4 -1
- package/fjs/media/note/module.f.d.mts +121 -0
- package/fjs/media/note/module.f.mjs +131 -0
- package/fjs/media/note/proof.f.d.mts +29 -0
- package/fjs/media/note/proof.f.mjs +150 -0
- package/fjs/media/note/types.d.ts +10 -0
- package/fjs/media/proof.f.d.mts +4 -1
- package/fjs/media/proof.f.mjs +40 -21
- package/fjs/media/revision/module.f.d.mts +83 -7
- package/fjs/media/revision/module.f.mjs +127 -23
- package/fjs/media/revision/proof.f.d.mts +14 -0
- package/fjs/media/revision/proof.f.mjs +93 -2
- package/fjs/media/revision/types.d.ts +34 -5
- package/fjs/media/type/module.f.d.mts +53 -18
- package/fjs/media/type/module.f.mjs +87 -97
- package/fjs/media/type/proof.f.d.mts +17 -0
- package/fjs/media/type/proof.f.mjs +73 -13
- package/fjs/module.d.mts +5 -0
- package/fjs/module.f.d.mts +8 -0
- package/fjs/module.f.mjs +33 -10
- package/fjs/module.mjs +6 -0
- package/fjs/nanvm/proof.f.mjs +3 -3
- package/fjs/nanvm/rust/module.f.mjs +1 -1
- package/fjs/nanvm/update/module.f.d.mts +4 -4
- package/fjs/nanvm/update/module.f.mjs +8 -9
- package/fjs/nanvm/update/proof.f.mjs +4 -3
- package/fjs/path/module.f.d.mts +8 -0
- package/fjs/path/module.f.mjs +4 -2
- package/fjs/proof.f.d.mts +7 -3
- package/fjs/proof.f.mjs +41 -12
- package/fjs/protocol/json_rpc/module.f.d.mts +3 -3
- package/fjs/protocol/json_rpc/module.f.mjs +10 -7
- package/fjs/protocol/json_rpc/proof.f.d.mts +6 -0
- package/fjs/protocol/json_rpc/proof.f.mjs +26 -5
- package/fjs/protocol/mcp/module.f.d.mts +10 -13
- package/fjs/protocol/mcp/module.f.mjs +74 -58
- package/fjs/protocol/mcp/proof.f.d.mts +16 -3
- package/fjs/protocol/mcp/proof.f.mjs +224 -69
- package/fjs/protocol/mcp/stdio/module.f.d.mts +17 -11
- package/fjs/protocol/mcp/stdio/module.f.mjs +39 -33
- package/fjs/protocol/mcp/stdio/proof.f.d.mts +5 -3
- package/fjs/protocol/mcp/stdio/proof.f.mjs +46 -13
- package/fjs/protocol/mcp/stdio/types.d.ts +14 -0
- package/fjs/protocol/mcp/types.d.ts +17 -6
- package/fjs/sul/id/module.f.d.mts +4 -0
- package/fjs/sul/id/module.f.mjs +6 -6
- package/fjs/sul/level/hash/module.f.d.mts +4 -1
- package/fjs/sul/level/hash/module.f.mjs +6 -4
- package/fjs/sul/level/hash/proof.f.d.mts +4 -0
- package/fjs/sul/level/hash/proof.f.mjs +7 -4
- package/fjs/sul/level/literal/module.f.d.mts +4 -1
- package/fjs/sul/level/literal/module.f.mjs +4 -3
- package/fjs/sul/level/literal/proof.f.d.mts +3 -0
- package/fjs/sul/level/literal/proof.f.mjs +4 -1
- package/fjs/sul/module.f.d.mts +5 -3
- package/fjs/sul/module.f.mjs +23 -17
- package/fjs/sul/proof.f.d.mts +4 -0
- package/fjs/sul/proof.f.mjs +5 -2
- package/fjs/text/ascii/module.f.d.mts +26 -0
- package/fjs/text/ascii/module.f.mjs +49 -1
- package/fjs/text/ascii/proof.f.d.mts +10 -0
- package/fjs/text/ascii/proof.f.mjs +33 -1
- package/fjs/text/code_point/module.f.d.mts +29 -3
- package/fjs/text/code_point/module.f.mjs +32 -9
- package/fjs/text/code_point/proof.f.d.mts +2 -0
- package/fjs/text/code_point/proof.f.mjs +39 -0
- package/fjs/text/module.f.d.mts +4 -2
- package/fjs/text/module.f.mjs +4 -3
- package/fjs/text/proof.f.d.mts +3 -0
- package/fjs/text/proof.f.mjs +4 -1
- package/fjs/text/sgr/module.f.d.mts +6 -5
- package/fjs/text/sgr/module.f.mjs +8 -8
- package/fjs/text/sgr/proof.f.d.mts +3 -0
- package/fjs/text/sgr/proof.f.mjs +4 -1
- package/fjs/text/utf16/module.f.d.mts +5 -1
- package/fjs/text/utf16/module.f.mjs +38 -35
- package/fjs/text/utf16/proof.f.d.mts +3 -1
- package/fjs/text/utf16/proof.f.mjs +19 -2
- package/fjs/text/utf8/module.f.d.mts +9 -5
- package/fjs/text/utf8/module.f.mjs +20 -20
- package/fjs/types/array/module.f.d.mts +2 -1
- package/fjs/types/array/module.f.mjs +16 -4
- package/fjs/types/bigfloat/module.f.d.mts +21 -1
- package/fjs/types/bigfloat/module.f.mjs +33 -7
- package/fjs/types/bigfloat/proof.f.d.mts +1 -0
- package/fjs/types/bigfloat/proof.f.mjs +46 -0
- package/fjs/types/bigint/module.f.d.mts +4 -0
- package/fjs/types/bigint/module.f.mjs +4 -3
- package/fjs/types/bit_vec/module.f.d.mts +10 -16
- package/fjs/types/bit_vec/module.f.mjs +99 -95
- package/fjs/types/bit_vec/proof.f.d.mts +6 -0
- package/fjs/types/bit_vec/proof.f.mjs +31 -5
- package/fjs/types/btree/find/module.f.d.mts +5 -1
- package/fjs/types/btree/find/module.f.mjs +5 -5
- package/fjs/types/btree/find/proof.f.d.mts +5 -1
- package/fjs/types/btree/find/proof.f.mjs +5 -3
- package/fjs/types/btree/module.f.d.mts +3 -0
- package/fjs/types/btree/module.f.mjs +3 -2
- package/fjs/types/btree/proof.f.d.mts +5 -1
- package/fjs/types/btree/proof.f.mjs +5 -3
- package/fjs/types/btree/remove/module.f.d.mts +11 -0
- package/fjs/types/btree/remove/module.f.mjs +10 -10
- package/fjs/types/btree/remove/proof.f.d.mts +3 -0
- package/fjs/types/btree/remove/proof.f.mjs +4 -1
- package/fjs/types/btree/set/module.f.d.mts +9 -0
- package/fjs/types/btree/set/module.f.mjs +14 -17
- package/fjs/types/btree/set/proof.f.d.mts +3 -0
- package/fjs/types/btree/set/proof.f.mjs +16 -1
- package/fjs/types/btree/types/module.f.d.mts +2 -1
- package/fjs/types/btree/types/module.f.mjs +2 -1
- package/fjs/types/byte_set/module.f.d.mts +20 -4
- package/fjs/types/byte_set/module.f.mjs +18 -8
- package/fjs/types/byte_set/proof.f.d.mts +3 -1
- package/fjs/types/byte_set/proof.f.mjs +10 -8
- package/fjs/types/function/compare/module.f.d.mts +3 -2
- package/fjs/types/function/compare/module.f.mjs +13 -5
- package/fjs/types/function/module.f.d.mts +8 -1
- package/fjs/types/function/module.f.mjs +8 -1
- package/fjs/types/function/operator/module.f.d.mts +2 -1
- package/fjs/types/function/operator/module.f.mjs +2 -2
- package/fjs/types/list/module.f.d.mts +10 -3
- package/fjs/types/list/module.f.mjs +6 -4
- package/fjs/types/list/proof.f.d.mts +4 -1
- package/fjs/types/list/proof.f.mjs +4 -2
- package/fjs/types/nibble_set/module.f.d.mts +2 -1
- package/fjs/types/nibble_set/module.f.mjs +2 -2
- package/fjs/types/nominal/module.f.d.mts +2 -1
- package/fjs/types/nominal/module.f.mjs +2 -1
- package/fjs/types/nullable/module.f.d.mts +26 -6
- package/fjs/types/nullable/module.f.mjs +25 -6
- package/fjs/types/nullable/proof.f.d.mts +4 -0
- package/fjs/types/nullable/proof.f.mjs +15 -0
- package/fjs/types/number/module.f.d.mts +4 -0
- package/fjs/types/number/module.f.mjs +4 -3
- package/fjs/types/object/module.f.d.mts +26 -4
- package/fjs/types/object/module.f.mjs +26 -7
- package/fjs/types/object/proof.f.d.mts +5 -2
- package/fjs/types/object/proof.f.mjs +6 -3
- package/fjs/types/object/structurally_same/module.f.d.mts +39 -0
- package/fjs/types/object/structurally_same/module.f.mjs +59 -0
- package/fjs/types/object/structurally_same/proof.f.d.mts +6 -0
- package/fjs/types/object/structurally_same/proof.f.mjs +73 -0
- package/fjs/types/ordered_map/module.f.d.mts +5 -0
- package/fjs/types/ordered_map/module.f.mjs +5 -4
- package/fjs/types/ordered_map/proof.f.d.mts +3 -0
- package/fjs/types/ordered_map/proof.f.mjs +4 -1
- package/fjs/types/patricia_trie/module.f.d.mts +2 -1
- package/fjs/types/patricia_trie/module.f.mjs +27 -12
- package/fjs/types/patricia_trie/proof.f.d.mts +3 -0
- package/fjs/types/patricia_trie/proof.f.mjs +4 -1
- package/fjs/types/prime_field/module.f.d.mts +3 -1
- package/fjs/types/prime_field/module.f.mjs +3 -2
- package/fjs/types/range/module.f.d.mts +2 -1
- package/fjs/types/range/module.f.mjs +2 -2
- package/fjs/types/range_map/module.f.d.mts +6 -0
- package/fjs/types/range_map/module.f.mjs +6 -9
- package/fjs/types/range_map/proof.f.d.mts +5 -1
- package/fjs/types/range_map/proof.f.mjs +5 -3
- package/fjs/types/range_set/module.f.d.mts +5 -0
- package/fjs/types/range_set/module.f.mjs +1 -0
- package/fjs/types/range_set/proof.f.d.mts +3 -0
- package/fjs/types/range_set/proof.f.mjs +4 -1
- package/fjs/types/result/module.d.mts +8 -0
- package/fjs/types/result/module.f.d.mts +37 -7
- package/fjs/types/result/module.f.mjs +38 -8
- package/fjs/types/result/module.mjs +9 -1
- package/fjs/types/result/proof.f.d.mts +5 -0
- package/fjs/types/result/proof.f.mjs +22 -2
- package/fjs/types/rtti/common/module.f.d.mts +44 -14
- package/fjs/types/rtti/common/module.f.mjs +42 -36
- package/fjs/types/rtti/common/proof.f.d.mts +4 -0
- package/fjs/types/rtti/common/proof.f.mjs +10 -7
- package/fjs/types/rtti/data/module.f.d.mts +134 -0
- package/fjs/types/rtti/data/module.f.mjs +1053 -0
- package/fjs/types/rtti/data/proof.f.d.mts +76 -0
- package/fjs/types/rtti/data/proof.f.mjs +589 -0
- package/fjs/types/rtti/data/types.d.ts +83 -0
- package/fjs/types/rtti/module.f.d.mts +12 -5
- package/fjs/types/rtti/module.f.mjs +7 -5
- package/fjs/types/rtti/parse/module.f.d.mts +48 -0
- package/fjs/types/rtti/parse/module.f.mjs +45 -34
- package/fjs/types/rtti/parse/proof.f.d.mts +3 -2
- package/fjs/types/rtti/parse/proof.f.mjs +51 -52
- package/fjs/types/rtti/proof.f.d.mts +3 -1
- package/fjs/types/rtti/proof.f.mjs +6 -2
- package/fjs/types/rtti/ts/module.f.d.mts +68 -9
- package/fjs/types/rtti/ts/module.f.mjs +258 -30
- package/fjs/types/rtti/ts/proof.f.d.mts +44 -0
- package/fjs/types/rtti/ts/proof.f.mjs +152 -4
- package/fjs/types/rtti/ts/types.d.ts +25 -1
- package/fjs/types/rtti/types.d.ts +40 -0
- package/fjs/types/sorted_list/module.f.d.mts +4 -1
- package/fjs/types/sorted_list/module.f.mjs +21 -12
- package/fjs/types/sorted_list/proof.f.d.mts +3 -1
- package/fjs/types/sorted_list/proof.f.mjs +3 -1
- package/fjs/types/sorted_set/module.f.d.mts +49 -1
- package/fjs/types/sorted_set/module.f.mjs +26 -2
- package/fjs/types/sorted_set/proof.f.d.mts +4 -1
- package/fjs/types/sorted_set/proof.f.mjs +19 -2
- package/fjs/types/string/module.f.d.mts +4 -0
- package/fjs/types/string/module.f.mjs +4 -3
- package/fjs/types/string_set/module.f.d.mts +3 -1
- package/fjs/types/string_set/module.f.mjs +3 -2
- package/fjs/types/ts/module.f.d.mts +2 -0
- package/fjs/types/ts/module.f.mjs +3 -3
- package/fjs/types/ts/proof.f.d.mts +1 -0
- package/fjs/types/ts/proof.f.mjs +5 -0
- package/fjs/types/ts/types.d.ts +6 -1
- package/fjs/types/uint8array/module.f.d.mts +13 -2
- package/fjs/types/uint8array/module.f.mjs +20 -15
- package/fjs/website/module.f.d.mts +5 -2
- package/fjs/website/module.f.mjs +6 -8
- package/fjs/website/proof.f.mjs +2 -1
- package/package.json +3 -3
- package/fjs/asn.1/types.js +0 -6
- package/fjs/asserts/types.js +0 -6
- package/fjs/basen/types.js +0 -6
- package/fjs/bnf/data/types.js +0 -6
- package/fjs/bnf/descent/types.js +0 -6
- package/fjs/bnf/ll1/types.js +0 -6
- package/fjs/bnf/token_symbol/types.js +0 -6
- package/fjs/bnf/types.js +0 -6
- package/fjs/cas/evo/types.js +0 -7
- package/fjs/cas/types.js +0 -6
- package/fjs/ci/common/types.js +0 -1
- package/fjs/ci/nix/types.js +0 -6
- package/fjs/ci/types.js +0 -6
- package/fjs/cli/types.js +0 -6
- package/fjs/common/monoid/types.js +0 -6
- package/fjs/crypto/pow/types.js +0 -6
- package/fjs/crypto/secp/types.js +0 -6
- package/fjs/crypto/sha2/types.js +0 -6
- package/fjs/crypto/sign/types.js +0 -6
- package/fjs/crypto/vdf/types.js +0 -6
- package/fjs/dev/package_json/module.f.d.mts +0 -32
- package/fjs/dev/package_json/module.f.mjs +0 -37
- package/fjs/dev/package_json/proof.f.d.mts +0 -6
- package/fjs/dev/package_json/proof.f.mjs +0 -32
- package/fjs/dev/types.js +0 -6
- package/fjs/djs/ast/types.js +0 -8
- package/fjs/djs/parser/types.js +0 -7
- package/fjs/djs/tokenizer/types.js +0 -7
- package/fjs/djs/types.js +0 -7
- package/fjs/effects/eff/module.f.d.mts +0 -10
- package/fjs/effects/eff/module.f.mjs +0 -68
- package/fjs/effects/eff/proof.f.d.mts +0 -12
- package/fjs/effects/eff/proof.f.mjs +0 -66
- package/fjs/effects/eff/types.d.ts +0 -71
- package/fjs/effects/eff/types.js +0 -6
- package/fjs/effects/list/types.js +0 -6
- package/fjs/effects/memory/types.js +0 -6
- package/fjs/effects/mock/types.js +0 -6
- package/fjs/effects/node/types.js +0 -6
- package/fjs/effects/node/virtual/types.js +0 -7
- package/fjs/effects/types.js +0 -6
- package/fjs/emergent_testing/all.test.d.ts +0 -1
- package/fjs/emergent_testing/all.test.js +0 -5
- package/fjs/emergent_testing/scenarios/all.d.ts +0 -1
- package/fjs/emergent_testing/scenarios/all.js +0 -1
- package/fjs/emergent_testing/scenarios/async-subtests.fail.d.ts +0 -6
- package/fjs/emergent_testing/scenarios/async-subtests.fail.js +0 -9
- package/fjs/emergent_testing/scenarios/async-subtests.pass.d.ts +0 -6
- package/fjs/emergent_testing/scenarios/async-subtests.pass.js +0 -9
- package/fjs/emergent_testing/scenarios/async.fail.d.ts +0 -3
- package/fjs/emergent_testing/scenarios/async.fail.js +0 -6
- package/fjs/emergent_testing/scenarios/async.pass.d.ts +0 -3
- package/fjs/emergent_testing/scenarios/async.pass.js +0 -5
- package/fjs/emergent_testing/scenarios/fail.fail.d.ts +0 -3
- package/fjs/emergent_testing/scenarios/fail.fail.js +0 -3
- package/fjs/emergent_testing/scenarios/return-value.pass.js +0 -4
- package/fjs/emergent_testing/scenarios/thenable.pass.d.ts +0 -5
- package/fjs/emergent_testing/scenarios/thenable.pass.js +0 -11
- package/fjs/emergent_testing/scenarios/thenable2.pass.d.ts +0 -5
- package/fjs/emergent_testing/scenarios/thenable2.pass.js +0 -3
- package/fjs/emergent_testing/scenarios/throw.pass.d.ts +0 -5
- package/fjs/emergent_testing/scenarios/throw.pass.js +0 -3
- package/fjs/emergent_testing/types.js +0 -6
- package/fjs/js/tokenizer/types.js +0 -6
- package/fjs/media/html/types.js +0 -6
- package/fjs/media/json/parser/types.js +0 -6
- package/fjs/media/json/tokenizer/types.js +0 -6
- package/fjs/media/json/types.js +0 -13
- package/fjs/media/nix/types.js +0 -6
- package/fjs/media/revision/types.js +0 -8
- package/fjs/media/type/types.js +0 -6
- package/fjs/media/types.js +0 -7
- package/fjs/nanvm/types.js +0 -11
- package/fjs/protocol/json_rpc/types.js +0 -8
- package/fjs/protocol/mcp/types.js +0 -8
- package/fjs/sul/id/types.js +0 -6
- package/fjs/sul/level/hash/types.js +0 -6
- package/fjs/sul/level/literal/types.js +0 -6
- package/fjs/sul/types.js +0 -6
- package/fjs/text/sgr/types.js +0 -6
- package/fjs/text/types.js +0 -6
- package/fjs/text/utf16/types.js +0 -6
- package/fjs/text/utf8/types.js +0 -6
- package/fjs/types/array/types.js +0 -6
- package/fjs/types/bigfloat/types.js +0 -6
- package/fjs/types/bigint/types.js +0 -6
- package/fjs/types/bit_vec/types.js +0 -6
- package/fjs/types/btree/find/types.js +0 -6
- package/fjs/types/btree/types/types.js +0 -6
- package/fjs/types/byte_set/types.js +0 -6
- package/fjs/types/function/compare/types.js +0 -6
- package/fjs/types/function/operator/types.js +0 -6
- package/fjs/types/function/types.js +0 -6
- package/fjs/types/list/types.js +0 -6
- package/fjs/types/nibble_set/types.js +0 -6
- package/fjs/types/nominal/types.js +0 -6
- package/fjs/types/nullable/types.js +0 -6
- package/fjs/types/object/types.js +0 -8
- package/fjs/types/option/types.js +0 -6
- package/fjs/types/ordered_map/types.js +0 -6
- package/fjs/types/patricia_trie/types.js +0 -6
- package/fjs/types/phantom/types.js +0 -11
- package/fjs/types/prime_field/types.js +0 -6
- package/fjs/types/range/types.js +0 -6
- package/fjs/types/range_map/types.js +0 -6
- package/fjs/types/result/types.js +0 -6
- package/fjs/types/rtti/common/types.js +0 -1
- package/fjs/types/rtti/parse/types.js +0 -1
- package/fjs/types/rtti/ts/types.js +0 -1
- package/fjs/types/rtti/types.js +0 -1
- package/fjs/types/rtti/validate/module.f.d.mts +0 -6
- package/fjs/types/rtti/validate/module.f.mjs +0 -169
- package/fjs/types/rtti/validate/proof.f.d.mts +0 -125
- package/fjs/types/rtti/validate/proof.f.mjs +0 -437
- package/fjs/types/rtti/validate/types.d.ts +0 -6
- package/fjs/types/rtti/validate/types.js +0 -1
- package/fjs/types/sorted_list/types.js +0 -6
- package/fjs/types/sorted_set/types.js +0 -6
- package/fjs/types/string_set/types.js +0 -6
- package/fjs/types/ts/types.js +0 -8
package/fjs/mcp/evo/proof.f.mjs
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
73
|
-
|
|
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
|
|
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
|
|
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
|
},
|
package/fjs/mcp/module.f.d.mts
CHANGED
|
@@ -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
|
};
|
package/fjs/mcp/module.f.mjs
CHANGED
|
@@ -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
|
-
|
|
30
|
-
|
|
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 =>
|
|
83
|
+
export const casMcpServer = home => ioStep(
|
|
82
84
|
initEvo(fileCas(sha256)(home)),
|
|
83
|
-
cacheKey =>
|
|
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
|
|
96
|
+
// real stdio server; call it here to cover its effect-building body.
|
|
95
97
|
casMcpServer: () => { casMcpServer('/') },
|
|
96
98
|
}
|
package/fjs/mcp/proof.f.d.mts
CHANGED
|
@@ -1,4 +1,16 @@
|
|
|
1
|
-
/**
|
|
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;
|