@ibgib/core-gib 0.1.10 → 0.1.11
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/dist/agent-helpers.d.mts +4 -13
- package/dist/agent-helpers.d.mts.map +1 -1
- package/dist/agent-helpers.mjs +109 -12
- package/dist/agent-helpers.mjs.map +1 -1
- package/dist/sync/sync-innerspace.respec.d.mts +8 -0
- package/dist/sync/sync-innerspace.respec.d.mts.map +1 -0
- package/dist/sync/sync-innerspace.respec.mjs +120 -0
- package/dist/sync/sync-innerspace.respec.mjs.map +1 -0
- package/dist/timeline/timeline-api.respec.d.mts +7 -0
- package/dist/timeline/timeline-api.respec.d.mts.map +1 -0
- package/dist/timeline/timeline-api.respec.mjs +183 -0
- package/dist/timeline/timeline-api.respec.mjs.map +1 -0
- package/dist/witness/space/metaspace/metaspace-base.d.mts.map +1 -1
- package/dist/witness/space/metaspace/metaspace-base.mjs +33 -5
- package/dist/witness/space/metaspace/metaspace-base.mjs.map +1 -1
- package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace-helper.d.mts.map +1 -1
- package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace-helper.mjs +3 -2
- package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace-helper.mjs.map +1 -1
- package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.respec.d.mts +7 -0
- package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.respec.d.mts.map +1 -0
- package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.respec.mjs +67 -0
- package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.respec.mjs.map +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/017DF612D9A86192706EE567B059C489EC8DA0B2B558166EFE61F75D8BF1ECEE/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/0EF68E1CA839A24CAEDB224A8AF92F258BD1F364A97E708705150595B3F67985/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/12EF728E4F98DDB89990D4CDAF3AC852729E804CE37E2041AF18CBA239328085/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/152DD42FA80FA6ABD0B4DAAAE9CE1AFCF94E649B210A08955DB8B86E09AF08BE/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/16A46B37492E2688088C69F237E5CDC4F4E8C1015CF8E66D044DC2FE115F6211/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/1F7942767491C1D740FFC87E046C2470697FE8D154806B51876C53E607B7F007/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/35754C7AD2967D57C34396084F1214343C48F9C1AAF1C11CDFB57B5CB95536F5/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/38CFD2C2DFD185FC1E5BEE8C55C8A4FFBD83B03F533B4F92537000C505939E39/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/43635745EEAE9EBD3426CC4AD88D2362DE15B2F8E4D1C694B3AE8687E8C6489D/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/5C4BCD98E1B3494CCFAC355D2C61025DCD43A1D3041E637ABDA83F0E1E7FA0BE/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/5FC1BCCA0F1EB6E656233401E330A7928BF58C09EF6B6B56EC69FCFAC0B3A47A/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/60B8ED34520992236C9E1859FAE4BA9DF206CC6BD75DA574E815EAF7B577C1BD/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/68B53978461355B04CA96CEE33E448CBC39CDEFEA8E907879C1D2E6A542672C4/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/6B62E238B88A3B5050DFF02AB91402C6702A822389315B4150308B774F5A0D01/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/6F7EC702F1109A564CFE009F634B27E5F82D6A309CF51B11F49846ABEEAD04B1/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/7AE69551608DB82E23DBA98CA7D059DF3F5C9E37174E581F7C154935F4362AA7/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/8C851E9DD394053BB50716EA6CDD07A48FA76AF5BB55513F898A18B2A4C64D1F/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/984DAD369079FEF2F83082F1CD944A432690F1CB0A5ECA9F009D50B385C4061A/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/C466B016831B11EEEC611208EDB50FD7BACD7E37D0037C0D1D78BD5B3D892794/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/C5D0AA2C7A2C01C52EFDF70242AA6CAAE06BCA80301A425D4E508E9ACD33DF44/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/CDDFD5D61010F7B15CFD78C49865C0134E8E037779DD80C6B4DED7DEB0D4CBB7/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/DDFAB26C3991470523BD7543D946A24A9CFEC9D5BEC197B7BD963E1507057A93/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/E174442450BBA2A570B0166CDF04844C3A5D1F7199DC59E0FA49F1BBACA47F5F/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/E6CE9621CF266A675DB7E3EBABD5D636E46E8006F116A0F7F0769B87DDDBFBB0/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 -1 1766860935000^7978FD0F9DD4EB6208A2D2113011F95E5C7EE80072BA3B7E4AC737CC771D621B.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 0 1766860935000^013C09075DF303BB5822FEEFE57F26B9F0DEE6DD382B116816FCDC2B7CAF0696.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 1 1766860935000^4EEBAD21A82BAC51A7B952DA32DACB37A653695D5D512A348CF15DB9B7DED5AC.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 10 1766860938000^84544F34B1297ED8F5FD4B437FCD4F1044FD0D40A0B270F8C7E79D89AA058DD6.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 11 1766860938000^023B07336455CD39B03DC52AF523DA19B588FD32ED7A4BB5BBE9ABE59ED75195.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 12 1766860939000^49685AA6F0064868886EBA984B072F6C63F92FC3315C29DDDF750D5B56E87D6B.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 13 1766860939000^A2475B1C99AC9F8B9A4D8B2BD8CB39A76FAA2E13AB2F7CEADA4AB02B42FF8BE4.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 14 1766860939000^2D0C93D837FFF096346E10F276BD1F08ECE4A2EC94BE9BC58759EBABAB1F2E42.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 15 1766860939000^4FA9AFA0EA50B833B342716C7745B9A39A7C0F9A09B4666CA67080A49EAB611B.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 16 1766860939000^A65760BEED125117DE7DF2F481A0F7CD250FFB579138ECC1A19C8401DAFCEB51.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 17 1766860940000^226FA64E1B4591C150F595D8408530502417C7FFEE3915589382F9C3B585053C.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 18 1766860940000^1ABF20687FB34275E0EE737538E7E5D4F15CDCB128C4F332043CB76AC78B0F05.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 19 1766860940000^89A44A1912B20AE873402C287CE09C4D41073F0A5B703CB22FD5272BB907FC19.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 2 1766860936000^A8D1C5244B85155B130EFCA9CF25185A9B7060F549603B993F2CA98FB269B178.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 20 1766860940000^72905A7F6A0A859003049827534B579BE090F0B6A221D14584745DAE6A999943.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 21 1766860948000^71168CE7419FFDB6E945655E1B3597A726111666C305EDA9A76D97FD7215E929.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 22 1766860967000^A5E8805E1AC44CF2A07606613DE14704BC1943268EFF48BF181E7216D8F07AA3.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 3 1766860936000^66806071E91EAC9E8F90A81700DD37FB56B7DFDE7B32FE47E142BAC58907173C.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 4 1766860937000^1A097ACE63079C7D91AC964F783834D172C41CD3FAD0D27A5B95DC6E1E5B7D6A.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 5 1766860937000^746153300B51309B664E4035E092CAE07F487A2B44D5DB79B770C7D9968D45CA.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 6 1766860937000^3F1EFF11C729D6175922400928667D3391E3D7B4B29CECD67987F3259A5003C5.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 7 1766860938000^D2867FC7F2A08C6678BAA320EE449F89E56D81EDC3BFFA79F9DA64BF98701014.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 8 1766860938000^AA9E5246E533F704E42BED13B878B830B91143AE71C8603FFCF187CF39904915.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 9 1766860938000^E4B12653516EB8690ED18ECFF3EA7AB5EA3FF70881D730F5859F193F5872DF15.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/04E79CE54F49DCEA75652ADF674DC9B21BA641944AD97ED7ED1369CF3A880E8D/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/0647EB78DB2C48AF3AE9D3EF7989A3DDA1A797D04BE18DB1210B3504BC39BA4E/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/08B4A7A62BC7DE27C180A3F70FA7C6C8F9728A98E79B200D9B2EE2D11E62CD97/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/0B2FEF92D3630CDFDD14C453DDDA288478022CEB778E0BB4ACC9C9511C770A39/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/3757E01592FABCA5D139026F156318A7F86AC097CC10ABA243D4E665EB3550C5/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/3A66623B180568E2AE3E95BD6C48684E765B6B8C2147A4DD13426B6808AC2567/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/3EADB84024E06764489225E537F285BF7F7F85C3ACC013F0FCB28B79E227DE2D/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/471A5F0BA13425E3412A376452549E5158CD5516C4E005872A50A10D7390CF12/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/6E6EA2A701C3AC1B5BCD766F39C59BA7BC5139AAF0EB5E9DE8814F77C4A192A7/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/7EF033B1C3C39C05359C89C301DEE7365F6F7A816776F6A0E540CE1A212CD612/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/834AECEDC108F37DADA5BD3583FA9C1E612AFA3FFFB1153CA0CD2F51239AD93F/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/8CA9BDE2ED96C7C8039D5AF78AEF620A985E32352238DEACACC7E2329006B9B9/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/90C61CC1159B21E9FE686C06D5C76FF6F5236F8C7D39CC183B8C81CE36471D9C/fork.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/A89842F2240358AEC12AE59014A14875AB6FC5C8EF2A5C50D8BD92EB5F54F4B6/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/B10FBD60588500D94D6CDA19E5E24DF7F4C3EDF66368E5875F13C4BFF9A8FD03/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/B5A0CAF33ACC64A57647ADD18B4F0CAD820F427819BB4615567131994D0399AB/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/C0223AA1B3B147E3AFC4233C60025BE4C975652EBF77C24D8B8FABC413594137/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/D07097470D6970574C539E1E16AEFCE0A3A67987C7554C9EEFA7204D6D1D81D4/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/D92466D1FCE56DB0828A2509590DDA0040FF250FD4FCE7F3E45B5D84887C83F0/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/E035FDD6BDD26B164AF5AD675D0567BC0FFB6E10E14BAFA6617EDB536EE162B9/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/E8B2955902784AFC4B4A251C771EC770D94234440C8B02C63B12628C29447069/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/EF9D3619C817B27EC4402BC215D08CC95A83E5042F4FC35AE2E737AC33B05629/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/F0D5006EF21791D68460DB0111983602EC450BBFFB3E47134D357A1BCD9FBD15/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/F15D698186AADD2BA9F3028F4F84630505D06220AB6482381FB35755AFC77E5F/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/F1913D9CF3C4F2CDE56C39EA86F8EB9A65D8FA22750DACD2B496EF27D88DE260/mut8.json +1 -0
- package/package.json +1 -1
- package/src/agent-helpers.mts +119 -18
- package/src/sync/sync-innerspace.respec.mts +144 -0
- package/src/timeline/timeline-api.respec.mts +237 -0
- package/src/witness/space/metaspace/metaspace-base.mts +31 -5
- package/src/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace-helper.mts +4 -2
- package/src/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.respec.mts +90 -0
package/src/agent-helpers.mts
CHANGED
|
@@ -6,47 +6,132 @@
|
|
|
6
6
|
* actions for creating and modifying data.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
+
import { extractErrorMsg, getUUID } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
|
|
9
10
|
import { IbGib_V1, IbGibRel8ns_V1, IbGibData_V1 } from '@ibgib/ts-gib/dist/V1/types.mjs';
|
|
10
|
-
|
|
11
|
+
|
|
12
|
+
import { GLOBAL_LOG_A_LOT } from './core-constants.mjs';
|
|
11
13
|
import { KeystoneService_V1 } from './keystone/keystone-service-v1.mjs';
|
|
12
14
|
import { IbGibSpaceAny } from './witness/space/space-base-v1.mjs';
|
|
15
|
+
import { Factory_V1 } from '@ibgib/ts-gib/dist/V1/factory.mjs';
|
|
16
|
+
import { createTimeline } from './timeline/timeline-api.mjs';
|
|
17
|
+
import { persistTransformResult, registerNewIbGib } from './witness/space/space-helper.mjs';
|
|
18
|
+
import { MetaspaceService } from './witness/space/metaspace/metaspace-types.mjs';
|
|
19
|
+
import { TransformResult } from '@ibgib/ts-gib/dist/types.mjs';
|
|
20
|
+
|
|
21
|
+
const logalot = GLOBAL_LOG_A_LOT;
|
|
13
22
|
|
|
14
23
|
/**
|
|
15
24
|
* Creates a "Stone" ibGib - an immutable, primitive-like data record with no history/timeline.
|
|
16
25
|
* Useful for static data, configurations, or standalone records.
|
|
17
26
|
*/
|
|
18
|
-
export async function createStoneHelper<TData = any>(
|
|
27
|
+
export async function createStoneHelper<TData extends IbGibData_V1 = any>({
|
|
28
|
+
ib,
|
|
29
|
+
data,
|
|
30
|
+
rel8ns,
|
|
31
|
+
uuid,
|
|
32
|
+
noTimestamp,
|
|
33
|
+
}: {
|
|
19
34
|
ib: string;
|
|
20
35
|
data?: TData;
|
|
21
36
|
rel8ns?: IbGibRel8ns_V1;
|
|
22
37
|
uuid?: boolean; // If true, generates a UUID in data
|
|
38
|
+
noTimestamp?: boolean;
|
|
23
39
|
}): Promise<IbGib_V1<TData>> {
|
|
24
|
-
|
|
40
|
+
const lc = `[${createStoneHelper.name}]`;
|
|
41
|
+
try {
|
|
42
|
+
if (logalot) { console.log(`${lc} starting... (I: e4b15ee74de22ec9a917c578adc83425)`); }
|
|
43
|
+
|
|
44
|
+
if (!ib) { throw new Error(`ib required (E: 3d5df8fd5b880e0e0dcedd37dbc3f825)`); }
|
|
45
|
+
|
|
46
|
+
// the parent primitive ib is almost always the atom of the ib.
|
|
47
|
+
const atom = ib.split(' ').at(0)!;
|
|
48
|
+
|
|
49
|
+
if (uuid) {
|
|
50
|
+
if (!data) { data = {} as TData; }
|
|
51
|
+
data.uuid = await getUUID();
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const stone = await Factory_V1.stone({
|
|
55
|
+
parentPrimitiveIb: atom,
|
|
56
|
+
ib,
|
|
57
|
+
data,
|
|
58
|
+
rel8ns,
|
|
59
|
+
uuid,
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
return stone;
|
|
63
|
+
} catch (error) {
|
|
64
|
+
console.error(`${lc} ${extractErrorMsg(error)}`);
|
|
65
|
+
throw error;
|
|
66
|
+
} finally {
|
|
67
|
+
if (logalot) { console.log(`${lc} complete.`); }
|
|
68
|
+
}
|
|
25
69
|
}
|
|
26
70
|
|
|
27
71
|
/**
|
|
28
72
|
* Creates a new "Living" Timeline Root.
|
|
29
73
|
* This is the starting point for any mutable data structure (a file, a user profile, a post).
|
|
30
74
|
*/
|
|
31
|
-
export async function createTimelineRootHelper<TData = any>(
|
|
75
|
+
export async function createTimelineRootHelper<TData extends IbGibData_V1 = any>({
|
|
76
|
+
ib,
|
|
77
|
+
data,
|
|
78
|
+
space,
|
|
79
|
+
}: {
|
|
32
80
|
ib: string; // e.g. "comment" or "task"
|
|
33
81
|
data?: TData; // Initial data
|
|
34
82
|
space: IbGibSpaceAny; // Where to persist this new root
|
|
35
83
|
}): Promise<IbGib_V1<TData>> {
|
|
36
|
-
|
|
37
|
-
|
|
84
|
+
const lc = `[${createTimelineRootHelper.name}]`;
|
|
85
|
+
try {
|
|
86
|
+
if (logalot) { console.log(`${lc} starting... (I: 8f50a8cf0268742048f7c188feb5a825)`); }
|
|
38
87
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
88
|
+
// const resTimeline = await createTimeline({
|
|
89
|
+
// ib,
|
|
90
|
+
// data,
|
|
91
|
+
// rel8ns: undefined,
|
|
92
|
+
// metaspace, space
|
|
93
|
+
// });
|
|
94
|
+
// const timeline = resTimeline.newIbGib;
|
|
95
|
+
|
|
96
|
+
// return timeline;
|
|
97
|
+
|
|
98
|
+
// Determine the parent to fork based on the provided options.
|
|
99
|
+
const atom = ib.split(' ').at(0)!;
|
|
100
|
+
const parentIbGib = Factory_V1.primitive({ ib: atom });
|
|
101
|
+
|
|
102
|
+
const resNew = await Factory_V1.firstGen<TData>({
|
|
103
|
+
parentIbGib,
|
|
104
|
+
ib,
|
|
105
|
+
data,
|
|
106
|
+
rel8ns: undefined,
|
|
107
|
+
// these options are what make this a "timeline"
|
|
108
|
+
dna: true,
|
|
109
|
+
nCounter: true,
|
|
110
|
+
tjp: { timestamp: true, uuid: true },
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
// Persist the new timeline and its DNA to the designated space.
|
|
114
|
+
await persistTransformResult({ resTransform: resNew, space });
|
|
115
|
+
await registerNewIbGib({
|
|
116
|
+
ibGib: resNew.newIbGib,
|
|
117
|
+
space,
|
|
118
|
+
/**
|
|
119
|
+
* We don't need to broadcast here because it's a new, independent
|
|
120
|
+
* timeline, so there are no listeners yet.
|
|
121
|
+
*/
|
|
122
|
+
fnBroadcast: undefined,
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
// We don't need to lock here because it's a new, independent timeline,
|
|
126
|
+
// so there are no concurrency concerns yet.
|
|
127
|
+
|
|
128
|
+
return resNew.newIbGib as IbGib_V1<TData>;
|
|
129
|
+
} catch (error) {
|
|
130
|
+
console.error(`${lc} ${extractErrorMsg(error)}`);
|
|
131
|
+
throw error;
|
|
132
|
+
} finally {
|
|
133
|
+
if (logalot) { console.log(`${lc} complete.`); }
|
|
134
|
+
}
|
|
50
135
|
}
|
|
51
136
|
|
|
52
137
|
/**
|
|
@@ -54,5 +139,21 @@ export async function forkTimelineHelper<TData = any>(opts: {
|
|
|
54
139
|
* This mocks the identity and signing logic needed for Sync operations.
|
|
55
140
|
*/
|
|
56
141
|
export async function getTestKeystoneServiceHelper(): Promise<KeystoneService_V1> {
|
|
57
|
-
|
|
142
|
+
class MockKeystoneService extends KeystoneService_V1 {
|
|
143
|
+
async getIdentity(): Promise<any> {
|
|
144
|
+
// Return a dummy identity
|
|
145
|
+
// We use the Factory directly here to just get *something* that looks like an ibgib
|
|
146
|
+
const res = await Factory_V1.firstGen({
|
|
147
|
+
parentIbGib: Factory_V1.primitive({ ib: 'identity' }),
|
|
148
|
+
ib: 'identity',
|
|
149
|
+
data: { uuid: await getUUID() },
|
|
150
|
+
dna: true,
|
|
151
|
+
});
|
|
152
|
+
return res.newIbGib;
|
|
153
|
+
}
|
|
154
|
+
// Implement other methods as no-ops or simple mocks
|
|
155
|
+
async sign(args: any): Promise<any> { return args.latestKeystone; /* minimal mock */ }
|
|
156
|
+
async verify(args: any): Promise<any> { return []; /* no errors */ }
|
|
157
|
+
}
|
|
158
|
+
return new MockKeystoneService() as unknown as KeystoneService_V1;
|
|
58
159
|
}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module sync-innerspace.respec
|
|
3
|
+
*
|
|
4
|
+
* Verifies SyncSagaCoordinator using InnerSpace (in-memory/local) spaces.
|
|
5
|
+
* This avoids disk I/O issues and focuses on the synchronization logic.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
respecfully, lastOfAll, ifWe, iReckon,
|
|
10
|
+
ifWeMight
|
|
11
|
+
} from '@ibgib/helper-gib/dist/respec-gib/respec-gib.mjs';
|
|
12
|
+
const maam = `[${import.meta.url}]`, sir = maam;
|
|
13
|
+
|
|
14
|
+
import { getIbGibAddr } from '@ibgib/ts-gib/dist/helper.mjs';
|
|
15
|
+
import { SyncSagaCoordinator } from './sync-saga-coordinator.mjs';
|
|
16
|
+
import { putInSpace, getFromSpace } from '../witness/space/space-helper.mjs';
|
|
17
|
+
import { Metaspace_Innerspace } from '../witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.mjs';
|
|
18
|
+
import { InnerSpace_V1 } from '../witness/space/inner-space/inner-space-v1.mjs';
|
|
19
|
+
import { createStoneHelper, createTimelineRootHelper, getTestKeystoneServiceHelper } from '../agent-helpers.mjs';
|
|
20
|
+
import { mut8Timeline, appendToTimeline } from '../timeline/timeline-api.mjs';
|
|
21
|
+
|
|
22
|
+
const logalot = true;
|
|
23
|
+
const lc = `[sync-innerspace.respec]`;
|
|
24
|
+
|
|
25
|
+
await respecfully(sir, `Sync InnerSpaces`, async () => {
|
|
26
|
+
|
|
27
|
+
let metaspace: Metaspace_Innerspace;
|
|
28
|
+
let sourceSpace: InnerSpace_V1;
|
|
29
|
+
let destSpace: InnerSpace_V1;
|
|
30
|
+
|
|
31
|
+
// Setup before each test? Or once?
|
|
32
|
+
// For now, let's just do it inside the test block to be safe/simple.
|
|
33
|
+
|
|
34
|
+
await ifWe(sir, `Basic Push Sync (Source -> Dest)`, async () => {
|
|
35
|
+
// await ifWeMight(sir, `Basic Push Sync (Source -> Dest)`, async () => {
|
|
36
|
+
// 1. Setup Spaces
|
|
37
|
+
metaspace = new Metaspace_Innerspace(undefined);
|
|
38
|
+
await metaspace.initialize({
|
|
39
|
+
getFnAlert: () => async ({ title, msg }) => { console.log(`[Alert] ${title}: ${msg}`); },
|
|
40
|
+
getFnPrompt: () => async ({ title, msg }) => { console.log(`[Prompt] ${title}: ${msg}`); return ''; },
|
|
41
|
+
getFnPromptPassword: () => async (title, msg) => { console.log(`[PromptPwd] ${title}: ${msg}`); return null; },
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
// Create two distinct inner spaces manually or via metaspace if supported
|
|
45
|
+
// Metaspace_Innerspace typically manages one local user space, but we can instantiate InnerSpace_V1 directly.
|
|
46
|
+
sourceSpace = new InnerSpace_V1({ name: 'source', uuid: 'source_uuid' } as any);
|
|
47
|
+
await (sourceSpace as any).initialize();
|
|
48
|
+
|
|
49
|
+
destSpace = new InnerSpace_V1({ name: 'dest', uuid: 'dest_uuid' } as any);
|
|
50
|
+
await (destSpace as any).initialize();
|
|
51
|
+
|
|
52
|
+
// 2. Seed Source Data
|
|
53
|
+
|
|
54
|
+
// 2.1 Create a "Stone"
|
|
55
|
+
console.log(`${lc} Creating Stone...`);
|
|
56
|
+
const stone = await createStoneHelper({
|
|
57
|
+
ib: 'stone_data',
|
|
58
|
+
data: { some: 'data' },
|
|
59
|
+
});
|
|
60
|
+
const stoneAddr = getIbGibAddr({ ibGib: stone });
|
|
61
|
+
await putInSpace({ space: sourceSpace, ibGibs: [stone] });
|
|
62
|
+
|
|
63
|
+
// 2.2 Create a "Living" Timeline (Root)
|
|
64
|
+
console.log(`${lc} Creating Timeline Root...`);
|
|
65
|
+
const root = await createTimelineRootHelper({
|
|
66
|
+
ib: 'timeline_root',
|
|
67
|
+
data: { type: 'root', n: 0 },
|
|
68
|
+
space: sourceSpace,
|
|
69
|
+
});
|
|
70
|
+
const rootAddr = getIbGibAddr({ ibGib: root });
|
|
71
|
+
|
|
72
|
+
// 2.3 Evolve Timeline (Root -> Child)
|
|
73
|
+
// using mut8Timeline to simulate evolution
|
|
74
|
+
console.log(`${lc} Evolving Timeline...`);
|
|
75
|
+
const child = await mut8Timeline({
|
|
76
|
+
timeline: root,
|
|
77
|
+
mut8Opts: {
|
|
78
|
+
dataToAddOrPatch: { type: 'child', n: 1 }
|
|
79
|
+
},
|
|
80
|
+
metaspace,
|
|
81
|
+
space: sourceSpace,
|
|
82
|
+
// We use skipLock=true for simplicity in single-threaded test setup if locking is complex,
|
|
83
|
+
// but timeline-api handles locking. Let's try default first.
|
|
84
|
+
// Actually InnerSpace locking might be no-op or simple.
|
|
85
|
+
});
|
|
86
|
+
const childAddr = getIbGibAddr({ ibGib: child });
|
|
87
|
+
|
|
88
|
+
// 2.4 Rel8 Child to Stone (Dependency)
|
|
89
|
+
console.log(`${lc} Linking Child to Stone...`);
|
|
90
|
+
const childWithRel = await appendToTimeline({
|
|
91
|
+
timeline: child,
|
|
92
|
+
rel8nInfos: [{
|
|
93
|
+
rel8nName: 'linked_stone',
|
|
94
|
+
ibGibs: [stone]
|
|
95
|
+
}],
|
|
96
|
+
metaspace,
|
|
97
|
+
space: sourceSpace,
|
|
98
|
+
});
|
|
99
|
+
const childWithRelAddr = getIbGibAddr({ ibGib: childWithRel });
|
|
100
|
+
|
|
101
|
+
// 3. Setup Sync Coordinator
|
|
102
|
+
console.log(`${lc} Setting up Coordinator...`);
|
|
103
|
+
const mockKeystone = await getTestKeystoneServiceHelper();
|
|
104
|
+
const identity = await (mockKeystone as any).getIdentity();
|
|
105
|
+
const coordinator = new SyncSagaCoordinator(mockKeystone);
|
|
106
|
+
|
|
107
|
+
// 4. Run Sync
|
|
108
|
+
console.log(`${lc} Running Sync...`);
|
|
109
|
+
const syncRes = await coordinator.sync({
|
|
110
|
+
source: sourceSpace,
|
|
111
|
+
dest: destSpace,
|
|
112
|
+
domainIbGibs: [childWithRel], // Sync starting from the tip
|
|
113
|
+
identity
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
// 5. Verify Dest
|
|
117
|
+
console.log(`${lc} Verifying Destination...`);
|
|
118
|
+
|
|
119
|
+
// Check Stone
|
|
120
|
+
const getStone = await getFromSpace({ space: destSpace, addr: stoneAddr });
|
|
121
|
+
iReckon(sir, getStone.success).asTo('getStone.success').isGonnaBeTrue();
|
|
122
|
+
iReckon(sir, getStone.ibGibs?.[0]).asTo('stone in dest').isGonnaBeTruthy();
|
|
123
|
+
console.log(`${lc} Verified Stone synced.`);
|
|
124
|
+
|
|
125
|
+
// Check Root (Dependency of Child)
|
|
126
|
+
const getRoot = await getFromSpace({ space: destSpace, addr: rootAddr });
|
|
127
|
+
iReckon(sir, getRoot.success).asTo('getRoot.success').isGonnaBeTrue();
|
|
128
|
+
iReckon(sir, getRoot.ibGibs?.[0]).asTo('root in dest').isGonnaBeTruthy();
|
|
129
|
+
console.log(`${lc} Verified Root synced.`);
|
|
130
|
+
|
|
131
|
+
// Check Child (Dependency of ChildWithRel)
|
|
132
|
+
const getChild = await getFromSpace({ space: destSpace, addr: childAddr });
|
|
133
|
+
iReckon(sir, getChild.success).asTo('getChild.success').isGonnaBeTrue();
|
|
134
|
+
iReckon(sir, getChild.ibGibs?.[0]).asTo('child in dest').isGonnaBeTruthy();
|
|
135
|
+
console.log(`${lc} Verified Child synced.`);
|
|
136
|
+
|
|
137
|
+
// Check ChildWithRel (The Tip)
|
|
138
|
+
const getChildWithRel = await getFromSpace({ space: destSpace, addr: childWithRelAddr });
|
|
139
|
+
iReckon(sir, getChildWithRel.success).asTo('getChildWithRel.success').isGonnaBeTrue();
|
|
140
|
+
iReckon(sir, getChildWithRel.ibGibs?.[0]).asTo('childWithRel in dest').isGonnaBeTruthy();
|
|
141
|
+
console.log(`${lc} Verified Timeline Tip synced.`);
|
|
142
|
+
|
|
143
|
+
});
|
|
144
|
+
});
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module timeline-api.respec
|
|
3
|
+
*
|
|
4
|
+
* specs for the high-level timeline api.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import {
|
|
8
|
+
firstOfEach, firstOfAll, ifWe,
|
|
9
|
+
lastOfEach, lastOfAll,
|
|
10
|
+
ifWeMight, iReckon, respecfully, respecfullyDear
|
|
11
|
+
} from '@ibgib/helper-gib/dist/respec-gib/respec-gib.mjs';
|
|
12
|
+
|
|
13
|
+
import { IbGib_V1, IbGibData_V1 } from '@ibgib/ts-gib/dist/V1/types.mjs';
|
|
14
|
+
import { InnerSpace_V1 } from '../witness/space/inner-space/inner-space-v1.mjs';
|
|
15
|
+
import { DEFAULT_INNER_SPACE_DATA_V1 } from '../witness/space/inner-space/inner-space-types.mjs';
|
|
16
|
+
import {
|
|
17
|
+
getLatestAddrs, persistTransformResult, registerNewIbGib, getFromSpace
|
|
18
|
+
} from '../witness/space/space-helper.mjs';
|
|
19
|
+
import { getIbGibAddr } from '@ibgib/ts-gib/dist/helper.mjs';
|
|
20
|
+
import {
|
|
21
|
+
createTimeline, mut8Timeline, appendToTimeline, getHistory
|
|
22
|
+
} from './timeline-api.mjs';
|
|
23
|
+
import { MetaspaceService } from '../witness/space/metaspace/metaspace-types.mjs';
|
|
24
|
+
import { IbGibAddr } from '@ibgib/ts-gib/dist/types.mjs';
|
|
25
|
+
import { IbGibSpaceAny } from '../witness/space/space-base-v1.mjs';
|
|
26
|
+
|
|
27
|
+
import { Metaspace_Innerspace } from '../witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.mjs';
|
|
28
|
+
|
|
29
|
+
const maam = `[${import.meta.url}]`, sir = maam;
|
|
30
|
+
|
|
31
|
+
interface TestData extends IbGibData_V1 {
|
|
32
|
+
note?: string;
|
|
33
|
+
testId?: string;
|
|
34
|
+
uniq?: number;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
respecfully(sir, `[timeline-api]`, async () => {
|
|
38
|
+
|
|
39
|
+
let space: InnerSpace_V1;
|
|
40
|
+
let metaspace: Metaspace_Innerspace;
|
|
41
|
+
|
|
42
|
+
firstOfEach(sir, async () => {
|
|
43
|
+
metaspace = new Metaspace_Innerspace(undefined);
|
|
44
|
+
await metaspace.initialize({
|
|
45
|
+
getFnAlert: () => async ({ title, msg }) => { console.log(`[Alert] ${title}: ${msg}`); },
|
|
46
|
+
getFnPrompt: () => async ({ title, msg }) => { console.log(`[Prompt] ${title}: ${msg}`); return ''; },
|
|
47
|
+
getFnPromptPassword: () => async (title, msg) => { console.log(`[PromptPwd] ${title}: ${msg}`); return null; },
|
|
48
|
+
});
|
|
49
|
+
space = metaspace.zeroSpace as InnerSpace_V1;
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
await ifWe(sir, `createTimeline`, async () => {
|
|
53
|
+
const res = await createTimeline<TestData>({
|
|
54
|
+
space,
|
|
55
|
+
metaspace,
|
|
56
|
+
data: { note: 'first timeline' },
|
|
57
|
+
ib: 'timeline',
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
const newTimeline = res.newIbGib;
|
|
61
|
+
iReckon(sir, newTimeline).asTo('newTimeline').isGonnaBeTruthy();
|
|
62
|
+
const addr = getIbGibAddr({ ibGib: newTimeline });
|
|
63
|
+
|
|
64
|
+
// verify persistence
|
|
65
|
+
const resGet = await getFromSpace({ addr, space });
|
|
66
|
+
iReckon(sir, resGet.success).asTo('persisted success').isGonnaBeTrue();
|
|
67
|
+
iReckon(sir, resGet.ibGibs![0]).asTo('persisted ibGib').isGonnaBe(newTimeline);
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
await ifWe(sir, `mut8Timeline`, async () => {
|
|
71
|
+
// Arrange
|
|
72
|
+
const resCreate = await createTimeline<TestData>({
|
|
73
|
+
space,
|
|
74
|
+
metaspace,
|
|
75
|
+
data: { note: 'orig' },
|
|
76
|
+
ib: 'timeline',
|
|
77
|
+
});
|
|
78
|
+
const timeline = resCreate.newIbGib;
|
|
79
|
+
console.log(`[mut8Timeline] created timeline n=${timeline.data!.n}`);
|
|
80
|
+
const initialPastLength = timeline.rel8ns?.past?.length || 0;
|
|
81
|
+
console.log(`[mut8Timeline] created timeline past length=${initialPastLength}`);
|
|
82
|
+
|
|
83
|
+
// Act
|
|
84
|
+
const mutatedTimeline = await mut8Timeline<TestData>({
|
|
85
|
+
timeline,
|
|
86
|
+
metaspace,
|
|
87
|
+
space,
|
|
88
|
+
mut8Opts: {
|
|
89
|
+
dataToAddOrPatch: { note: 'mutated' },
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
console.log(`[mut8Timeline] mutated timeline n=${mutatedTimeline.data!.n}`);
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
// Assert
|
|
96
|
+
iReckon(sir, mutatedTimeline).asTo('mutatedTimeline').isGonnaBeTruthy();
|
|
97
|
+
iReckon(sir, mutatedTimeline.data!.note).asTo('data.note').isGonnaBe('mutated');
|
|
98
|
+
|
|
99
|
+
// n should increment by 1
|
|
100
|
+
const expectedN = (timeline.data!.n || 0) + 1;
|
|
101
|
+
iReckon(sir, mutatedTimeline.data!.n).asTo('data.n').isGonnaBe(expectedN);
|
|
102
|
+
|
|
103
|
+
iReckon(sir, mutatedTimeline.rel8ns!.past).asTo('past').isGonnaBeTruthy();
|
|
104
|
+
// past length should include the previous frame + whatever it had
|
|
105
|
+
iReckon(sir, mutatedTimeline.rel8ns!.past!.length).asTo('past length').isGonnaBe(initialPastLength + 1);
|
|
106
|
+
iReckon(sir, mutatedTimeline.rel8ns!.past!.at(-1)).asTo('past addr').isGonnaBe(getIbGibAddr({ ibGib: timeline }));
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
await ifWe(sir, `appendToTimeline`, async () => {
|
|
110
|
+
// Arrange
|
|
111
|
+
const resCreate = await createTimeline<TestData>({
|
|
112
|
+
space,
|
|
113
|
+
metaspace,
|
|
114
|
+
data: { n: 0 },
|
|
115
|
+
ib: 'timeline',
|
|
116
|
+
});
|
|
117
|
+
let timeline = resCreate.newIbGib;
|
|
118
|
+
const rel8nInfos = [{
|
|
119
|
+
rel8nName: 'attachment',
|
|
120
|
+
ibGibs: [timeline] // just attaching itself as a test, weird but valid structure
|
|
121
|
+
}];
|
|
122
|
+
const timelinePastLength = timeline.rel8ns?.past?.length || 0;
|
|
123
|
+
|
|
124
|
+
// Act
|
|
125
|
+
const appendedTimeline = await appendToTimeline({
|
|
126
|
+
timeline,
|
|
127
|
+
rel8nInfos,
|
|
128
|
+
metaspace,
|
|
129
|
+
space,
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
// Assert
|
|
133
|
+
iReckon(sir, appendedTimeline).asTo('appendedTimeline').isGonnaBeTruthy();
|
|
134
|
+
iReckon(sir, appendedTimeline.rel8ns!.attachment).asTo('attachment').isGonnaBeTruthy();
|
|
135
|
+
iReckon(sir, appendedTimeline.rel8ns!.past?.length).asTo('past').isGonnaBe(timelinePastLength + 1);
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
await ifWe(sir, `getHistory`, async () => {
|
|
139
|
+
// Arrange
|
|
140
|
+
let t0 = (await createTimeline<TestData>({ space, metaspace, data: { n: 0 }, ib: 'timeline' })).newIbGib;
|
|
141
|
+
let t1 = await mut8Timeline<TestData>({ timeline: t0, metaspace, space, mut8Opts: { dataToAddOrPatch: { n: 1 } } });
|
|
142
|
+
let t2 = await mut8Timeline<TestData>({ timeline: t1, metaspace, space, mut8Opts: { dataToAddOrPatch: { n: 2 } } });
|
|
143
|
+
|
|
144
|
+
// Act
|
|
145
|
+
const history = await getHistory({
|
|
146
|
+
timeline: t2,
|
|
147
|
+
metaspace,
|
|
148
|
+
space,
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
// Assert
|
|
152
|
+
// t0 is actually 2nd frame (fork -> mut8).
|
|
153
|
+
// so history is [genesis, t0, t1]. length 3.
|
|
154
|
+
iReckon(sir, history.orderedPastIbGibs.length).asTo('history length').isGonnaBe(3);
|
|
155
|
+
// index 0 is genesis (the fork)
|
|
156
|
+
// index 1 is t0
|
|
157
|
+
// index 2 is t1
|
|
158
|
+
iReckon(sir, getIbGibAddr({ ibGib: history.orderedPastIbGibs[1] })).asTo('t0').isGonnaBe(getIbGibAddr({ ibGib: t0 }));
|
|
159
|
+
iReckon(sir, getIbGibAddr({ ibGib: history.orderedPastIbGibs[2] })).asTo('t1').isGonnaBe(getIbGibAddr({ ibGib: t1 }));
|
|
160
|
+
iReckon(sir, getIbGibAddr({ ibGib: history.headIbGib })).asTo('head').isGonnaBe(getIbGibAddr({ ibGib: t2 }));
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
await ifWe(sir, `Concurrency & Locking (Stress Test)`, async () => {
|
|
164
|
+
// const concurrencyLevels = [1, 2, 5, 50, 1000]; // too slow, because the locking mechanism doesn't scale well.
|
|
165
|
+
const concurrencyLevels = [1, 2, 5, 50];
|
|
166
|
+
|
|
167
|
+
for (const N of concurrencyLevels) {
|
|
168
|
+
console.log(`[Stress Test] Testing concurrency level: ${N}`);
|
|
169
|
+
|
|
170
|
+
// Arrange: Baseline
|
|
171
|
+
let tInitial = (await createTimeline<TestData>({
|
|
172
|
+
space,
|
|
173
|
+
metaspace,
|
|
174
|
+
data: { n: 0, testId: `concurrent-${N}` },
|
|
175
|
+
ib: 'timeline',
|
|
176
|
+
})).newIbGib;
|
|
177
|
+
|
|
178
|
+
// Initial state check
|
|
179
|
+
const initialN = (tInitial.data!.n || 0); // should be 1
|
|
180
|
+
const historyInitial = await getHistory({ timeline: tInitial, metaspace, space });
|
|
181
|
+
const initialHistoryLength = historyInitial.orderedPastIbGibs.length; // should be 1 (genesis)
|
|
182
|
+
|
|
183
|
+
// Act: Launch N mutations simultaneously
|
|
184
|
+
const promises: Promise<any>[] = [];
|
|
185
|
+
for (let i = 0; i < N; i++) {
|
|
186
|
+
promises.push(mut8Timeline<TestData>({
|
|
187
|
+
timeline: tInitial, // All start referencing the same initial frame (or logically the timeline itself)
|
|
188
|
+
// Note: In reality, if we pass the *same* object tInitial, mut8Timeline should
|
|
189
|
+
// resolve the *latest* inside the function.
|
|
190
|
+
metaspace,
|
|
191
|
+
space,
|
|
192
|
+
mut8Opts: {
|
|
193
|
+
dataToAddOrPatch: {
|
|
194
|
+
uniq: i, // distinct data to ensure unique hashes if needed
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// No skipLock! We want them to contend.
|
|
198
|
+
}));
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
try {
|
|
202
|
+
// Wait for all to complete
|
|
203
|
+
await Promise.all(promises);
|
|
204
|
+
|
|
205
|
+
// Verification
|
|
206
|
+
// 1. Get Latest Address
|
|
207
|
+
const resLatest = await getLatestAddrs({ ibGibs: [tInitial], space });
|
|
208
|
+
const latestAddr = resLatest.data!.latestAddrsMap![getIbGibAddr({ ibGib: tInitial })] as string;
|
|
209
|
+
|
|
210
|
+
iReckon(sir, latestAddr).asTo(`[N=${N}] latestAddr exists`).isGonnaBeTruthy();
|
|
211
|
+
|
|
212
|
+
// 2. Load the latest frame
|
|
213
|
+
const resGet = await getFromSpace({ addr: latestAddr, space });
|
|
214
|
+
const latestIbGib = resGet.ibGibs![0];
|
|
215
|
+
|
|
216
|
+
// 3. Verify data.n
|
|
217
|
+
// Initial n=1. We did N mutations.
|
|
218
|
+
// Each mutation increments nCounter.
|
|
219
|
+
const expectedN = initialN + N;
|
|
220
|
+
iReckon(sir, latestIbGib.data!.n).asTo(`[N=${N}] data.n should be ${expectedN}`).isGonnaBe(expectedN);
|
|
221
|
+
|
|
222
|
+
// 4. Verify Lineage (no divergence)
|
|
223
|
+
// History length should be initialHistoryLength + N
|
|
224
|
+
const history = await getHistory({ timeline: latestIbGib, metaspace, space });
|
|
225
|
+
const expectedHistoryLength = initialHistoryLength + N;
|
|
226
|
+
iReckon(sir, history.orderedPastIbGibs.length).asTo(`[N=${N}] history length`).isGonnaBe(expectedHistoryLength);
|
|
227
|
+
|
|
228
|
+
console.log(`[Stress Test] [N=${N}] SUCCESS. Final n=${latestIbGib.data!.n}`);
|
|
229
|
+
|
|
230
|
+
} catch (err) {
|
|
231
|
+
console.error(`[Stress Test] [N=${N}] FAILED:`, err);
|
|
232
|
+
throw err;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
});
|
|
@@ -1539,11 +1539,37 @@ export abstract class MetaspaceBase implements MetaspaceService {
|
|
|
1539
1539
|
if (!resGetLatest) { throw new Error(`resGetLatest falsy (E: 3851bbe4427ae11771f222234e8c6622)`); }
|
|
1540
1540
|
if (!resGetLatest.data) { throw new Error(`invalid resGetLatest: data falsy (E: 134e0f1f65edc69c6951c32e00a4bb22)`); }
|
|
1541
1541
|
if (resGetLatest.data.success) {
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1542
|
+
// Should have addrs map
|
|
1543
|
+
const latestAddrsMap = resGetLatest.data.latestAddrsMap;
|
|
1544
|
+
if (!latestAddrsMap) {
|
|
1545
|
+
// fallback to old way just in case? Or just error.
|
|
1546
|
+
// The error I saw had latestAddrsMap but no addrs.
|
|
1547
|
+
// So we should look at the map.
|
|
1548
|
+
if (resGetLatest.data.addrs?.length === 1) {
|
|
1549
|
+
return resGetLatest.data.addrs[0];
|
|
1550
|
+
} else if (resGetLatest.data.addrsNotFound?.length === 1) {
|
|
1551
|
+
return undefined;
|
|
1552
|
+
}
|
|
1553
|
+
} else {
|
|
1554
|
+
// We have the map. Ideally we want the one entry.
|
|
1555
|
+
const keys = Object.keys(latestAddrsMap);
|
|
1556
|
+
if (keys.length === 1) {
|
|
1557
|
+
return latestAddrsMap[keys[0]] || undefined;
|
|
1558
|
+
} else if (keys.length === 0) {
|
|
1559
|
+
// could be not found?
|
|
1560
|
+
if (resGetLatest.data.addrsNotFound?.length === 1) {
|
|
1561
|
+
return undefined;
|
|
1562
|
+
} else {
|
|
1563
|
+
// If we didn't find it, and success is true, maybe it's just undefined?
|
|
1564
|
+
// But usually getLatestAddrs returns map entries for found ones.
|
|
1565
|
+
return undefined;
|
|
1566
|
+
}
|
|
1567
|
+
} else {
|
|
1568
|
+
throw new Error(`(UNEXPECTED) latestAddrsMap has multiple entries? We only asked for one. (E: 790518290f6b46729017684698539222)`);
|
|
1569
|
+
}
|
|
1570
|
+
}
|
|
1571
|
+
|
|
1572
|
+
if (resGetLatest.data.addrsErrored?.length === 1) {
|
|
1547
1573
|
const emsg = resGetLatest.data.errors?.join('|') ?? "[unspecified error(s)] (E: 24f338036aa84ac99e3c39a660207222)";
|
|
1548
1574
|
throw new Error(`resGetLatest had error(s): ${emsg}`);
|
|
1549
1575
|
} else {
|
|
@@ -9,6 +9,7 @@ import { DEFAULT_LOCAL_SPACE_POLLING_INTERVAL_MS, } from "../../../../witness/sp
|
|
|
9
9
|
import { InnerSpace_V1, } from "../../inner-space/inner-space-v1.mjs";
|
|
10
10
|
import { InnerSpaceData_V1 } from "../../inner-space/inner-space-types.mjs";
|
|
11
11
|
|
|
12
|
+
|
|
12
13
|
const innerSpaces: { [tjpGib: string]: IbGibSpaceAny } = {};
|
|
13
14
|
|
|
14
15
|
export const fnCreateNewLocalSpace: LocalSpaceFactoryFunction = async ({
|
|
@@ -96,10 +97,11 @@ export const fnDtoToSpace: DtoToSpaceFunction = async (spaceDto) => {
|
|
|
96
97
|
if ((spaceDto as InnerSpace_V1).ibGibs) {
|
|
97
98
|
return spaceDto as InnerSpace_V1;
|
|
98
99
|
} else {
|
|
99
|
-
|
|
100
|
+
// test is outputting a lot of these logs
|
|
101
|
+
// console.log(`${lc} spaceDto: ${pretty(spaceDto)} (I: d69ab87f2fa8360ff8e60e78aa15c825)`); // I want to keep this in if we need to turn the logging back on
|
|
100
102
|
|
|
101
103
|
if (!spaceDto.data) { throw new Error(`invalid spaceDto. InnerSpace_V1 should have truthy data. (E: d402fda7a6a53668b655c2885029a423)`); }
|
|
102
|
-
console.dir(spaceDto);
|
|
104
|
+
// console.dir(spaceDto); // I want to keep this in if we need to turn the logging back on
|
|
103
105
|
|
|
104
106
|
const gibInfo = getGibInfo({ gib: spaceDto.gib });
|
|
105
107
|
const tjpGib = gibInfo.tjpGib ?? spaceDto.gib!;
|