@ibgib/core-gib 0.1.10 → 0.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/agent-helpers.d.mts +4 -13
  3. package/dist/agent-helpers.d.mts.map +1 -1
  4. package/dist/agent-helpers.mjs +109 -12
  5. package/dist/agent-helpers.mjs.map +1 -1
  6. package/dist/sync/sync-innerspace.respec.d.mts +8 -0
  7. package/dist/sync/sync-innerspace.respec.d.mts.map +1 -0
  8. package/dist/sync/sync-innerspace.respec.mjs +242 -0
  9. package/dist/sync/sync-innerspace.respec.mjs.map +1 -0
  10. package/dist/timeline/timeline-api.respec.d.mts +7 -0
  11. package/dist/timeline/timeline-api.respec.d.mts.map +1 -0
  12. package/dist/timeline/timeline-api.respec.mjs +210 -0
  13. package/dist/timeline/timeline-api.respec.mjs.map +1 -0
  14. package/dist/witness/space/inner-space/inner-space-v1.d.mts +1 -1
  15. package/dist/witness/space/inner-space/inner-space-v1.d.mts.map +1 -1
  16. package/dist/witness/space/inner-space/inner-space-v1.mjs +4 -3
  17. package/dist/witness/space/inner-space/inner-space-v1.mjs.map +1 -1
  18. package/dist/witness/space/metaspace/metaspace-base.d.mts.map +1 -1
  19. package/dist/witness/space/metaspace/metaspace-base.mjs +33 -5
  20. package/dist/witness/space/metaspace/metaspace-base.mjs.map +1 -1
  21. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace-helper.d.mts +18 -0
  22. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace-helper.d.mts.map +1 -1
  23. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace-helper.mjs +42 -12
  24. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace-helper.mjs.map +1 -1
  25. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.d.mts.map +1 -1
  26. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.mjs +2 -1
  27. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.mjs.map +1 -1
  28. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.respec.d.mts +7 -0
  29. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.respec.d.mts.map +1 -0
  30. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.respec.mjs +69 -0
  31. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.respec.mjs.map +1 -0
  32. package/dist/witness/space/space-helper.d.mts.map +1 -1
  33. package/dist/witness/space/space-helper.mjs +1 -0
  34. package/dist/witness/space/space-helper.mjs.map +1 -1
  35. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/017DF612D9A86192706EE567B059C489EC8DA0B2B558166EFE61F75D8BF1ECEE/test ib.json +1 -0
  36. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/0EF68E1CA839A24CAEDB224A8AF92F258BD1F364A97E708705150595B3F67985/test ib.json +1 -0
  37. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/12EF728E4F98DDB89990D4CDAF3AC852729E804CE37E2041AF18CBA239328085/test ib.json +1 -0
  38. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/152DD42FA80FA6ABD0B4DAAAE9CE1AFCF94E649B210A08955DB8B86E09AF08BE/test ib.json +1 -0
  39. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/16A46B37492E2688088C69F237E5CDC4F4E8C1015CF8E66D044DC2FE115F6211/test ib.json +1 -0
  40. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/1F7942767491C1D740FFC87E046C2470697FE8D154806B51876C53E607B7F007/test ib.json +1 -0
  41. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/35754C7AD2967D57C34396084F1214343C48F9C1AAF1C11CDFB57B5CB95536F5/test ib.json +1 -0
  42. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/38CFD2C2DFD185FC1E5BEE8C55C8A4FFBD83B03F533B4F92537000C505939E39/test ib.json +1 -0
  43. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/43635745EEAE9EBD3426CC4AD88D2362DE15B2F8E4D1C694B3AE8687E8C6489D/test ib.json +1 -0
  44. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/5C4BCD98E1B3494CCFAC355D2C61025DCD43A1D3041E637ABDA83F0E1E7FA0BE/test ib.json +1 -0
  45. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/5FC1BCCA0F1EB6E656233401E330A7928BF58C09EF6B6B56EC69FCFAC0B3A47A/test ib.json +1 -0
  46. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/60B8ED34520992236C9E1859FAE4BA9DF206CC6BD75DA574E815EAF7B577C1BD/test ib.json +1 -0
  47. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/68B53978461355B04CA96CEE33E448CBC39CDEFEA8E907879C1D2E6A542672C4/test ib.json +1 -0
  48. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/6B62E238B88A3B5050DFF02AB91402C6702A822389315B4150308B774F5A0D01/test ib.json +1 -0
  49. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/6F7EC702F1109A564CFE009F634B27E5F82D6A309CF51B11F49846ABEEAD04B1/test ib.json +1 -0
  50. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/7AE69551608DB82E23DBA98CA7D059DF3F5C9E37174E581F7C154935F4362AA7/test ib.json +1 -0
  51. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/8C851E9DD394053BB50716EA6CDD07A48FA76AF5BB55513F898A18B2A4C64D1F/test ib.json +1 -0
  52. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/984DAD369079FEF2F83082F1CD944A432690F1CB0A5ECA9F009D50B385C4061A/test ib.json +1 -0
  53. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/C466B016831B11EEEC611208EDB50FD7BACD7E37D0037C0D1D78BD5B3D892794/test ib.json +1 -0
  54. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/C5D0AA2C7A2C01C52EFDF70242AA6CAAE06BCA80301A425D4E508E9ACD33DF44/test ib.json +1 -0
  55. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/CDDFD5D61010F7B15CFD78C49865C0134E8E037779DD80C6B4DED7DEB0D4CBB7/test ib.json +1 -0
  56. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/DDFAB26C3991470523BD7543D946A24A9CFEC9D5BEC197B7BD963E1507057A93/test ib.json +1 -0
  57. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/E174442450BBA2A570B0166CDF04844C3A5D1F7199DC59E0FA49F1BBACA47F5F/test ib.json +1 -0
  58. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/E6CE9621CF266A675DB7E3EBABD5D636E46E8006F116A0F7F0769B87DDDBFBB0/test ib.json +1 -0
  59. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 -1 1766860935000^7978FD0F9DD4EB6208A2D2113011F95E5C7EE80072BA3B7E4AC737CC771D621B.json +1 -0
  60. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 0 1766860935000^013C09075DF303BB5822FEEFE57F26B9F0DEE6DD382B116816FCDC2B7CAF0696.json +1 -0
  61. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 1 1766860935000^4EEBAD21A82BAC51A7B952DA32DACB37A653695D5D512A348CF15DB9B7DED5AC.json +1 -0
  62. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 10 1766860938000^84544F34B1297ED8F5FD4B437FCD4F1044FD0D40A0B270F8C7E79D89AA058DD6.json +1 -0
  63. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 11 1766860938000^023B07336455CD39B03DC52AF523DA19B588FD32ED7A4BB5BBE9ABE59ED75195.json +1 -0
  64. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 12 1766860939000^49685AA6F0064868886EBA984B072F6C63F92FC3315C29DDDF750D5B56E87D6B.json +1 -0
  65. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 13 1766860939000^A2475B1C99AC9F8B9A4D8B2BD8CB39A76FAA2E13AB2F7CEADA4AB02B42FF8BE4.json +1 -0
  66. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 14 1766860939000^2D0C93D837FFF096346E10F276BD1F08ECE4A2EC94BE9BC58759EBABAB1F2E42.json +1 -0
  67. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 15 1766860939000^4FA9AFA0EA50B833B342716C7745B9A39A7C0F9A09B4666CA67080A49EAB611B.json +1 -0
  68. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 16 1766860939000^A65760BEED125117DE7DF2F481A0F7CD250FFB579138ECC1A19C8401DAFCEB51.json +1 -0
  69. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 17 1766860940000^226FA64E1B4591C150F595D8408530502417C7FFEE3915589382F9C3B585053C.json +1 -0
  70. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 18 1766860940000^1ABF20687FB34275E0EE737538E7E5D4F15CDCB128C4F332043CB76AC78B0F05.json +1 -0
  71. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 19 1766860940000^89A44A1912B20AE873402C287CE09C4D41073F0A5B703CB22FD5272BB907FC19.json +1 -0
  72. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 2 1766860936000^A8D1C5244B85155B130EFCA9CF25185A9B7060F549603B993F2CA98FB269B178.json +1 -0
  73. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 20 1766860940000^72905A7F6A0A859003049827534B579BE090F0B6A221D14584745DAE6A999943.json +1 -0
  74. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 21 1766860948000^71168CE7419FFDB6E945655E1B3597A726111666C305EDA9A76D97FD7215E929.json +1 -0
  75. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 22 1766860967000^A5E8805E1AC44CF2A07606613DE14704BC1943268EFF48BF181E7216D8F07AA3.json +1 -0
  76. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 3 1766860936000^66806071E91EAC9E8F90A81700DD37FB56B7DFDE7B32FE47E142BAC58907173C.json +1 -0
  77. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 4 1766860937000^1A097ACE63079C7D91AC964F783834D172C41CD3FAD0D27A5B95DC6E1E5B7D6A.json +1 -0
  78. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 5 1766860937000^746153300B51309B664E4035E092CAE07F487A2B44D5DB79B770C7D9968D45CA.json +1 -0
  79. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 6 1766860937000^3F1EFF11C729D6175922400928667D3391E3D7B4B29CECD67987F3259A5003C5.json +1 -0
  80. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 7 1766860938000^D2867FC7F2A08C6678BAA320EE449F89E56D81EDC3BFFA79F9DA64BF98701014.json +1 -0
  81. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 8 1766860938000^AA9E5246E533F704E42BED13B878B830B91143AE71C8603FFCF187CF39904915.json +1 -0
  82. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 9 1766860938000^E4B12653516EB8690ED18ECFF3EA7AB5EA3FF70881D730F5859F193F5872DF15.json +1 -0
  83. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/test ib.json +1 -0
  84. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/04E79CE54F49DCEA75652ADF674DC9B21BA641944AD97ED7ED1369CF3A880E8D/mut8.json +1 -0
  85. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/0647EB78DB2C48AF3AE9D3EF7989A3DDA1A797D04BE18DB1210B3504BC39BA4E/mut8.json +1 -0
  86. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/08B4A7A62BC7DE27C180A3F70FA7C6C8F9728A98E79B200D9B2EE2D11E62CD97/mut8.json +1 -0
  87. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/0B2FEF92D3630CDFDD14C453DDDA288478022CEB778E0BB4ACC9C9511C770A39/mut8.json +1 -0
  88. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/3757E01592FABCA5D139026F156318A7F86AC097CC10ABA243D4E665EB3550C5/mut8.json +1 -0
  89. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/3A66623B180568E2AE3E95BD6C48684E765B6B8C2147A4DD13426B6808AC2567/mut8.json +1 -0
  90. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/3EADB84024E06764489225E537F285BF7F7F85C3ACC013F0FCB28B79E227DE2D/mut8.json +1 -0
  91. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/471A5F0BA13425E3412A376452549E5158CD5516C4E005872A50A10D7390CF12/mut8.json +1 -0
  92. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/6E6EA2A701C3AC1B5BCD766F39C59BA7BC5139AAF0EB5E9DE8814F77C4A192A7/mut8.json +1 -0
  93. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/7EF033B1C3C39C05359C89C301DEE7365F6F7A816776F6A0E540CE1A212CD612/mut8.json +1 -0
  94. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/834AECEDC108F37DADA5BD3583FA9C1E612AFA3FFFB1153CA0CD2F51239AD93F/mut8.json +1 -0
  95. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/8CA9BDE2ED96C7C8039D5AF78AEF620A985E32352238DEACACC7E2329006B9B9/mut8.json +1 -0
  96. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/90C61CC1159B21E9FE686C06D5C76FF6F5236F8C7D39CC183B8C81CE36471D9C/fork.json +1 -0
  97. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/A89842F2240358AEC12AE59014A14875AB6FC5C8EF2A5C50D8BD92EB5F54F4B6/mut8.json +1 -0
  98. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/B10FBD60588500D94D6CDA19E5E24DF7F4C3EDF66368E5875F13C4BFF9A8FD03/mut8.json +1 -0
  99. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/B5A0CAF33ACC64A57647ADD18B4F0CAD820F427819BB4615567131994D0399AB/mut8.json +1 -0
  100. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/C0223AA1B3B147E3AFC4233C60025BE4C975652EBF77C24D8B8FABC413594137/mut8.json +1 -0
  101. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/D07097470D6970574C539E1E16AEFCE0A3A67987C7554C9EEFA7204D6D1D81D4/mut8.json +1 -0
  102. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/D92466D1FCE56DB0828A2509590DDA0040FF250FD4FCE7F3E45B5D84887C83F0/mut8.json +1 -0
  103. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/E035FDD6BDD26B164AF5AD675D0567BC0FFB6E10E14BAFA6617EDB536EE162B9/mut8.json +1 -0
  104. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/E8B2955902784AFC4B4A251C771EC770D94234440C8B02C63B12628C29447069/mut8.json +1 -0
  105. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/EF9D3619C817B27EC4402BC215D08CC95A83E5042F4FC35AE2E737AC33B05629/mut8.json +1 -0
  106. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/F0D5006EF21791D68460DB0111983602EC450BBFFB3E47134D357A1BCD9FBD15/mut8.json +1 -0
  107. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/F15D698186AADD2BA9F3028F4F84630505D06220AB6482381FB35755AFC77E5F/mut8.json +1 -0
  108. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/F1913D9CF3C4F2CDE56C39EA86F8EB9A65D8FA22750DACD2B496EF27D88DE260/mut8.json +1 -0
  109. package/package.json +1 -1
  110. package/src/agent-helpers.mts +119 -18
  111. package/src/sync/sync-innerspace.respec.mts +289 -0
  112. package/src/timeline/timeline-api.respec.mts +255 -0
  113. package/src/witness/space/inner-space/inner-space-v1.mts +5 -3
  114. package/src/witness/space/metaspace/metaspace-base.mts +31 -5
  115. package/src/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace-helper.mts +43 -12
  116. package/src/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.mts +2 -1
  117. package/src/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.respec.mts +92 -0
  118. package/src/witness/space/space-helper.mts +1 -1
@@ -0,0 +1,255 @@
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
+ const maam = `[${import.meta.url}]`, sir = maam;
13
+ import { getUUID } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
14
+ import { IbGibData_V1 } from '@ibgib/ts-gib/dist/V1/types.mjs';
15
+ import { getIbGibAddr } from '@ibgib/ts-gib/dist/helper.mjs';
16
+
17
+ import { GLOBAL_LOG_A_LOT } from '../core-constants.mjs';
18
+ import { InnerSpace_V1 } from '../witness/space/inner-space/inner-space-v1.mjs';
19
+ import { getLatestAddrs, getFromSpace } from '../witness/space/space-helper.mjs';
20
+ import {
21
+ createTimeline, mut8Timeline, getHistory, appendToTimeline
22
+ } from './timeline-api.mjs';
23
+ import { Metaspace_Innerspace } from '../witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.mjs';
24
+ import { resetInnerSpaces } from '../witness/space/metaspace/metaspace-innerspace/metaspace-innerspace-helper.mjs';
25
+
26
+ const logalot = GLOBAL_LOG_A_LOT;
27
+
28
+
29
+ interface TestData extends IbGibData_V1 {
30
+ note?: string;
31
+ testId?: string;
32
+ uniq?: number;
33
+ }
34
+
35
+ respecfully(sir, `[timeline-api]`, async () => {
36
+
37
+ let space: InnerSpace_V1;
38
+ let metaspace: Metaspace_Innerspace;
39
+
40
+ firstOfEach(sir, async () => {
41
+ resetInnerSpaces();
42
+ metaspace = new Metaspace_Innerspace(undefined);
43
+ await metaspace.initialize({
44
+ getFnAlert: () => async ({ title, msg }) => { console.log(`[Alert] ${title}: ${msg}`); },
45
+ getFnPrompt: () => async ({ title, msg }) => { console.log(`[Prompt] ${title}: ${msg}`); return ''; },
46
+ getFnPromptPassword: () => async (title, msg) => { console.log(`[PromptPwd] ${title}: ${msg}`); return 'password'; },
47
+ });
48
+ space = metaspace.zeroSpace as InnerSpace_V1;
49
+ });
50
+
51
+ await ifWe(sir, `createTimeline`, async () => {
52
+ const res = await createTimeline<TestData>({
53
+ space,
54
+ metaspace,
55
+ data: { note: 'first timeline' },
56
+ ib: 'timeline',
57
+ });
58
+
59
+ const newTimeline = res.newIbGib;
60
+ iReckon(sir, newTimeline).asTo('newTimeline').isGonnaBeTruthy();
61
+ const addr = getIbGibAddr({ ibGib: newTimeline });
62
+
63
+ // verify persistence
64
+ const resGet = await getFromSpace({ addr, space });
65
+ iReckon(sir, resGet.success).asTo('persisted success').isGonnaBeTrue();
66
+ iReckon(sir, resGet.ibGibs![0]).asTo('persisted ibGib').isGonnaBe(newTimeline);
67
+ });
68
+
69
+ await ifWe(sir, `mut8Timeline`, async () => {
70
+ // Arrange
71
+ const resCreate = await createTimeline<TestData>({
72
+ space,
73
+ metaspace,
74
+ data: { note: 'orig' },
75
+ ib: 'timeline',
76
+ });
77
+ const timeline = resCreate.newIbGib;
78
+ console.log(`[mut8Timeline] created timeline n=${timeline.data!.n}`);
79
+ const initialPastLength = timeline.rel8ns?.past?.length || 0;
80
+ console.log(`[mut8Timeline] created timeline past length=${initialPastLength}`);
81
+
82
+ // Act
83
+ const mutatedTimeline = await mut8Timeline<TestData>({
84
+ timeline,
85
+ metaspace,
86
+ space,
87
+ mut8Opts: {
88
+ dataToAddOrPatch: { note: 'mutated' },
89
+ }
90
+ });
91
+ console.log(`[mut8Timeline] mutated timeline n=${mutatedTimeline.data!.n}`);
92
+
93
+
94
+ // Assert
95
+ iReckon(sir, mutatedTimeline).asTo('mutatedTimeline').isGonnaBeTruthy();
96
+ iReckon(sir, mutatedTimeline.data!.note).asTo('data.note').isGonnaBe('mutated');
97
+
98
+ // n should increment by 1
99
+ const expectedN = (timeline.data!.n || 0) + 1;
100
+ iReckon(sir, mutatedTimeline.data!.n).asTo('data.n').isGonnaBe(expectedN);
101
+
102
+ iReckon(sir, mutatedTimeline.rel8ns!.past).asTo('past').isGonnaBeTruthy();
103
+ // past length should include the previous frame + whatever it had
104
+ iReckon(sir, mutatedTimeline.rel8ns!.past!.length).asTo('past length').isGonnaBe(initialPastLength + 1);
105
+ iReckon(sir, mutatedTimeline.rel8ns!.past!.at(-1)).asTo('past addr').isGonnaBe(getIbGibAddr({ ibGib: timeline }));
106
+ });
107
+
108
+ await ifWe(sir, `appendToTimeline`, async () => {
109
+ // Arrange
110
+ const resCreate = await createTimeline<TestData>({
111
+ space,
112
+ metaspace,
113
+ data: { n: 0 },
114
+ ib: 'timeline',
115
+ });
116
+ let timeline = resCreate.newIbGib;
117
+ const rel8nInfos = [{
118
+ rel8nName: 'attachment',
119
+ ibGibs: [timeline] // just attaching itself as a test, weird but valid structure
120
+ }];
121
+ const timelinePastLength = timeline.rel8ns?.past?.length || 0;
122
+
123
+ // Act
124
+ const appendedTimeline = await appendToTimeline({
125
+ timeline,
126
+ rel8nInfos,
127
+ metaspace,
128
+ space,
129
+ });
130
+
131
+ // Assert
132
+ iReckon(sir, appendedTimeline).asTo('appendedTimeline').isGonnaBeTruthy();
133
+ iReckon(sir, appendedTimeline.rel8ns!.attachment).asTo('attachment').isGonnaBeTruthy();
134
+ iReckon(sir, appendedTimeline.rel8ns!.past?.length).asTo('past').isGonnaBe(timelinePastLength + 1);
135
+ });
136
+
137
+ await ifWe(sir, `getHistory`, async () => {
138
+ // Arrange
139
+ let t0 = (await createTimeline<TestData>({ space, metaspace, data: { n: 0 }, ib: 'timeline' })).newIbGib;
140
+ let t1 = await mut8Timeline<TestData>({ timeline: t0, metaspace, space, mut8Opts: { dataToAddOrPatch: { n: 1 } } });
141
+ let t2 = await mut8Timeline<TestData>({ timeline: t1, metaspace, space, mut8Opts: { dataToAddOrPatch: { n: 2 } } });
142
+
143
+ // Act
144
+ const history = await getHistory({
145
+ timeline: t2,
146
+ metaspace,
147
+ space,
148
+ });
149
+
150
+ // Assert
151
+ // t0 is actually 2nd frame (fork -> mut8).
152
+ // so history is [genesis, t0, t1]. length 3.
153
+ iReckon(sir, history.orderedPastIbGibs.length).asTo('history length').isGonnaBe(3);
154
+ // index 0 is genesis (the fork)
155
+ // index 1 is t0
156
+ // index 2 is t1
157
+ iReckon(sir, getIbGibAddr({ ibGib: history.orderedPastIbGibs[1] })).asTo('t0').isGonnaBe(getIbGibAddr({ ibGib: t0 }));
158
+ iReckon(sir, getIbGibAddr({ ibGib: history.orderedPastIbGibs[2] })).asTo('t1').isGonnaBe(getIbGibAddr({ ibGib: t1 }));
159
+ iReckon(sir, getIbGibAddr({ ibGib: history.headIbGib })).asTo('head').isGonnaBe(getIbGibAddr({ ibGib: t2 }));
160
+ });
161
+
162
+ await ifWe(sir, `Concurrency & Locking (Stress Test)`, async () => {
163
+ // const concurrencyLevels = [1, 2, 5, 50, 1000]; // too slow, because the locking mechanism doesn't scale well.
164
+ const concurrencyLevels = [1, 2, 5, 50];
165
+
166
+ for (const N of concurrencyLevels) {
167
+ if (logalot) { console.log(`[Stress Test] Testing concurrency level: ${N}`); }
168
+
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
+ console.log(`already had addr for fork expected (I: 585a392f1c5aa0eedc1aedd8bbc31325)`);
183
+
184
+ // Act: Launch N mutations simultaneously
185
+ /**
186
+ * I'm getting output (warnings?) that the transform ibgib addr
187
+ * already exists. This stems from the fact that dna/transform
188
+ * ibgibs do not have timestamps or anything, they simply are
189
+ * memoized args to the transform functions. So we need something
190
+ * unique _in the arg itself_, which in this case means in the
191
+ * `dataToAddOrPatch` field.
192
+ *
193
+ * Note, however, that it is expected for the original `fork`
194
+ * transform that created tInitial to be common and for it to
195
+ * already have this fork dna ibgib. But this shouldn't happen for
196
+ * each mut8 transform.
197
+ */
198
+ const uniqueIdsForUniqueTransforms: string[] = [];
199
+ for (let i = 0; i < N; i++) {
200
+ uniqueIdsForUniqueTransforms.push(await getUUID());
201
+ }
202
+ const promises: Promise<any>[] = [];
203
+ for (let i = 0; i < N; i++) {
204
+ promises.push(mut8Timeline<TestData>({
205
+ timeline: tInitial, // All start referencing the same initial frame (or logically the timeline itself)
206
+ // Note: In reality, if we pass the *same* object tInitial, mut8Timeline should
207
+ // resolve the *latest* inside the function.
208
+ metaspace,
209
+ space,
210
+ mut8Opts: {
211
+ dataToAddOrPatch: {
212
+ uniqueId: uniqueIdsForUniqueTransforms.pop(),
213
+ }
214
+ }
215
+ // No skipLock! We want them to contend.
216
+ }));
217
+ }
218
+
219
+ try {
220
+ // Wait for all to complete
221
+ await Promise.all(promises);
222
+
223
+ // Verification
224
+ // 1. Get Latest Address
225
+ const resLatest = await getLatestAddrs({ ibGibs: [tInitial], space });
226
+ const latestAddr = resLatest.data!.latestAddrsMap![getIbGibAddr({ ibGib: tInitial })] as string;
227
+
228
+ iReckon(sir, latestAddr).asTo(`[N=${N}] latestAddr exists`).isGonnaBeTruthy();
229
+
230
+ // 2. Load the latest frame
231
+ const resGet = await getFromSpace({ addr: latestAddr, space });
232
+ const latestIbGib = resGet.ibGibs![0];
233
+
234
+ // 3. Verify data.n
235
+ // Initial n=1. We did N mutations.
236
+ // Each mutation increments nCounter.
237
+ const expectedN = initialN + N;
238
+ iReckon(sir, latestIbGib.data!.n).asTo(`[N=${N}] data.n should be ${expectedN}`).isGonnaBe(expectedN);
239
+
240
+ // 4. Verify Lineage (no divergence)
241
+ // History length should be initialHistoryLength + N
242
+ const history = await getHistory({ timeline: latestIbGib, metaspace, space });
243
+ const expectedHistoryLength = initialHistoryLength + N;
244
+ iReckon(sir, history.orderedPastIbGibs.length).asTo(`[N=${N}] history length`).isGonnaBe(expectedHistoryLength);
245
+
246
+ if (logalot) { console.log(`[Stress Test] [N=${N}] SUCCESS. Final n=${latestIbGib.data!.n}`); }
247
+
248
+ } catch (err) {
249
+ console.error(`[Stress Test] [N=${N}] FAILED:`, err);
250
+ throw err;
251
+ }
252
+ }
253
+ });
254
+
255
+ });
@@ -1,7 +1,6 @@
1
1
  import { clone, extractErrorMsg, groupBy, pretty } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
2
2
  import { IbGibAddr } from '@ibgib/ts-gib/dist/types.mjs';
3
3
  import { getIbGibAddr, } from '@ibgib/ts-gib/dist/helper.mjs';
4
- import { IbGib_V1, getGib, } from '@ibgib/ts-gib/dist/V1/index.mjs';
5
4
  import { validateIbGibIntrinsically } from '@ibgib/ts-gib/dist/V1/validate-helper.mjs';
6
5
 
7
6
  import { GLOBAL_LOG_A_LOT } from '../../../core-constants.mjs';
@@ -14,6 +13,8 @@ import { getSpaceIb, } from '../space-helper.mjs';
14
13
  import { getTjpAddr } from '../../../common/other/ibgib-helper.mjs';
15
14
  import { ReconciliationSpaceBase, ReconciliationSpaceData, ReconciliationSpaceRel8ns } from '../reconciliation-space/reconciliation-space-base.mjs';
16
15
  import { DEFAULT_INNER_SPACE_DATA_V1, InnerSpaceData_V1, InnerSpaceRel8ns_V1 } from './inner-space-types.mjs';
16
+ import { IbGib_V1 } from '@ibgib/ts-gib/dist/V1/types.mjs';
17
+ import { getGib } from '@ibgib/ts-gib/dist/V1/transforms/transform-helper.mjs';
17
18
 
18
19
  const logalot = GLOBAL_LOG_A_LOT;
19
20
 
@@ -197,7 +198,7 @@ export class InnerSpace_V1<
197
198
 
198
199
  if (addrsAlreadyHave.length > 0) {
199
200
  resultData.addrsAlreadyHave = addrsAlreadyHave;
200
- resultData.warnings = (resultData.warnings || []).concat([`${lc} already had addr(s).`]);
201
+ resultData.warnings = (resultData.warnings || []).concat([`${lc} already had addr(s): ${addrsAlreadyHave.join('|')}`]);
201
202
  }
202
203
  resultData.success = true;
203
204
  } catch (error) {
@@ -321,7 +322,8 @@ export class InnerSpace_V1<
321
322
  const timeline = ibGibsInSpaceByTjp[tjpAddr];
322
323
 
323
324
  if (timeline.some(ibGib => ibGib.data?.n === undefined)) {
324
- console.warn(`${lc} timeline includes ibgibs with ibGib.data?.n === undefined (W: 7360a8e81b05accf244fb4b86e796325)`);
325
+ const filtered = timeline.filter(ibGib => ibGib.data?.n === undefined);
326
+ console.warn(`${lc} timeline includes ibgibs with ibGib.data?.n === undefined.\nfiltered:\n${filtered.map(x => pretty(x)).join('\n')}}(W: 7360a8e81b05accf244fb4b86e796325)`);
325
327
  }
326
328
  // sort mutates array in place
327
329
  timeline.sort((a, b) => (a.data?.n ?? -1) > (b.data?.n ?? -1) ? 1 : -1); // sorts ascending, e.g., 0,1,2...[Highest]
@@ -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
- if (resGetLatest.data.addrs?.length === 1) {
1543
- return resGetLatest.data.addrs[0];
1544
- } else if (resGetLatest.data.addrsNotFound?.length === 1) {
1545
- return undefined;
1546
- } else if (resGetLatest.data.addrsErrored?.length === 1) {
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,7 +9,40 @@ 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
- const innerSpaces: { [tjpGib: string]: IbGibSpaceAny } = {};
12
+
13
+ const innerSpaces: { [spaceId: string]: IbGibSpaceAny } = {};
14
+
15
+ /**
16
+ * Extracts the spaceId from the ib string.
17
+ *
18
+ * ib format: `witness space [classname] [name] [id] [type] [subtype]`
19
+ */
20
+ export function getSpaceIdFromIb(ib: string): string {
21
+ if (!ib) { throw new Error(`ib required. (E: 7c28c8e1a8a24345bb344155b4131422)`); }
22
+ const parts = ib.split(' ');
23
+ // witness space classname name id ...
24
+ // 0 1 2 3 4
25
+ if (parts.length < 5) { throw new Error(`invalid space ib format: ${ib} (E: 14a84497e59648949822067786481223)`); }
26
+ return parts[4];
27
+ }
28
+
29
+ /**
30
+ * Manually registers a space in the module-level registry.
31
+ * Use this when creating spaces outside of the standard factory functions
32
+ * (e.g. via direct constructor calls) to ensure they are resolvable by DTO.
33
+ */
34
+ export const registerInnerSpace = (space: IbGibSpaceAny) => {
35
+ const spaceId = getSpaceIdFromIb(space.ib);
36
+ innerSpaces[spaceId] = space;
37
+ }
38
+
39
+ /**
40
+ * Resets the internal registry of spaces.
41
+ * USE FOR TESTING ONLY.
42
+ */
43
+ export const resetInnerSpaces = () => {
44
+ Object.keys(innerSpaces).forEach(key => delete innerSpaces[key]);
45
+ }
13
46
 
14
47
  export const fnCreateNewLocalSpace: LocalSpaceFactoryFunction = async ({
15
48
  allowCancel,
@@ -73,9 +106,7 @@ Enter space name:
73
106
  if (newLocalSpace.gib === GIB) { throw new Error(`localSpace.gib not updated correctly.`); }
74
107
  if (logalot) { console.log(`${lc} localSpace.gib: ${newLocalSpace.gib} (after sha256v1)`); }
75
108
 
76
- const gibInfo = getGibInfo({ gib: newLocalSpace.gib });
77
- const tjpGib = gibInfo.tjpGib ?? newLocalSpace.gib!;
78
- innerSpaces[tjpGib] = newLocalSpace;
109
+ registerInnerSpace(newLocalSpace as IbGibSpaceAny);
79
110
 
80
111
  return newLocalSpace as IbGibSpaceAny;
81
112
  } catch (error) {
@@ -96,14 +127,15 @@ export const fnDtoToSpace: DtoToSpaceFunction = async (spaceDto) => {
96
127
  if ((spaceDto as InnerSpace_V1).ibGibs) {
97
128
  return spaceDto as InnerSpace_V1;
98
129
  } else {
99
- console.log(`${lc} spaceDto: ${pretty(spaceDto)} (I: d69ab87f2fa8360ff8e60e78aa15c825)`);
130
+ // test is outputting a lot of these logs
131
+ // console.log(`${lc} spaceDto: ${pretty(spaceDto)} (I: d69ab87f2fa8360ff8e60e78aa15c825)`); // I want to keep this in if we need to turn the logging back on
100
132
 
101
133
  if (!spaceDto.data) { throw new Error(`invalid spaceDto. InnerSpace_V1 should have truthy data. (E: d402fda7a6a53668b655c2885029a423)`); }
102
- console.dir(spaceDto);
134
+ // console.dir(spaceDto); // I want to keep this in if we need to turn the logging back on
103
135
 
104
- const gibInfo = getGibInfo({ gib: spaceDto.gib });
105
- const tjpGib = gibInfo.tjpGib ?? spaceDto.gib!;
106
- const existingSpace = innerSpaces[tjpGib];
136
+ const spaceId = getSpaceIdFromIb(spaceDto.ib);
137
+ // console.log(`${lc} spaceDto.gib: ${spaceDto.gib}\ninnerSpaces keys:\n${Object.keys(innerSpaces).join('\n')}`);
138
+ const existingSpace = innerSpaces[spaceId];
107
139
  if (existingSpace) {
108
140
  return existingSpace;
109
141
  } else {
@@ -111,9 +143,8 @@ export const fnDtoToSpace: DtoToSpaceFunction = async (spaceDto) => {
111
143
  console.warn(`${lc} in memory innerspace dto that isnt' the reference to the object itself in memory, and we don't have it in the inner spaces map? i guess we'll create a new one from the dto (W: b8973f3a43f546eeaf59f60331896e75)`)
112
144
  let space = new InnerSpace_V1(spaceDto.data as InnerSpaceData_V1, spaceDto.rel8ns);
113
145
  await space.initialized;
114
- const gibInfo = getGibInfo({ gib: space.gib });
115
- const tjpGib = gibInfo.tjpGib ?? space.gib!;
116
- innerSpaces[tjpGib] = space;
146
+
147
+ registerInnerSpace(space);
117
148
  return space;
118
149
  }
119
150
  }
@@ -12,7 +12,7 @@ import { IbGibSpaceAny } from '../../../../witness/space/space-base-v1.mjs';
12
12
  import { InnerSpace_V1 } from '../../../../witness/space/inner-space/inner-space-v1.mjs';
13
13
  import { IbGibCacheService } from '../../../../common/cache/cache-types.mjs';
14
14
  import { MetaspaceFactory } from '../metaspace-types.mjs';
15
- import { fnCreateNewLocalSpace, fnDtoToSpace } from './metaspace-innerspace-helper.mjs';
15
+ import { fnCreateNewLocalSpace, fnDtoToSpace, registerInnerSpace } from './metaspace-innerspace-helper.mjs';
16
16
  import { MetaspaceBase } from '../metaspace-base.mjs';
17
17
 
18
18
  const logalot = GLOBAL_LOG_A_LOT;
@@ -75,6 +75,7 @@ export class Metaspace_Innerspace extends MetaspaceBase {
75
75
  const zeroSpace = new InnerSpace_V1(/*initialData*/ undefined as any, /*initialRel8ns*/ undefined);
76
76
  zeroSpace.gib = 'gib';
77
77
  this._zeroSpace = zeroSpace;
78
+ registerInnerSpace(this._zeroSpace);
78
79
  return zeroSpace;
79
80
  }
80
81
  };
@@ -0,0 +1,92 @@
1
+ /**
2
+ * @module metaspace-innerspace.respec
3
+ *
4
+ * specs for the in-memory metaspace implementation.
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 { getIbGibAddr } from '@ibgib/ts-gib/dist/helper.mjs';
15
+ import { InnerSpace_V1 } from '../../../../witness/space/inner-space/inner-space-v1.mjs';
16
+ import { Metaspace_Innerspace } from './metaspace-innerspace.mjs';
17
+ import { createTimeline, mut8Timeline } from '../../../../timeline/timeline-api.mjs';
18
+ import { MetaspaceService } from '../metaspace-types.mjs';
19
+ import { resetInnerSpaces } from './metaspace-innerspace-helper.mjs';
20
+
21
+ const maam = `[${import.meta.url}]`, sir = maam;
22
+
23
+ respecfully(sir, `[metaspace-innerspace]`, async () => {
24
+
25
+ let metaspace: Metaspace_Innerspace;
26
+
27
+ firstOfEach(sir, async () => {
28
+ resetInnerSpaces();
29
+ metaspace = new Metaspace_Innerspace(undefined); // no cache for now
30
+ await metaspace.initialize({
31
+ getFnAlert: () => async ({ title, msg }) => { console.log(`[Alert] ${title}: ${msg}`); },
32
+ getFnPrompt: () => async ({ title, msg }) => { console.log(`[Prompt] ${title}: ${msg}`); return ''; },
33
+ getFnPromptPassword: () => async (title, msg) => { console.log(`[PromptPwd] ${title}: ${msg}`); return null; },
34
+ });
35
+ });
36
+
37
+ await ifWe(sir, `can instantiate`, async () => {
38
+ iReckon(sir, metaspace).asTo('metaspace').isGonnaBeTruthy();
39
+ iReckon(sir, metaspace.initialized).asTo('initialized').isGonnaBeTrue();
40
+ });
41
+
42
+ await ifWe(sir, `has zeroSpace`, async () => {
43
+ const zs = metaspace.zeroSpace;
44
+ iReckon(sir, zs).asTo('zeroSpace').isGonnaBeTruthy();
45
+ });
46
+
47
+ await ifWe(sir, `can createTimeline and track latest`, async () => {
48
+ // This implicitly tests getLatestAddr/s via timeline-api usage if we were using it,
49
+ // but here we call it directly or via minimal timeline op.
50
+
51
+ // 1. Create a timeline via timeline-api using this metaspace
52
+ const resCreate = await createTimeline({
53
+ space: metaspace.zeroSpace,
54
+ metaspace: metaspace,
55
+ data: { n: 0 },
56
+ ib: 'timeline'
57
+ });
58
+ const t0 = resCreate.newIbGib;
59
+ const t0Addr = getIbGibAddr({ ibGib: t0 });
60
+
61
+ // 2. Verify we can get latest addr
62
+ // Ideally metaspace should track this automatically if registerNewIbGib is called inside createTimeline,
63
+ // which calls metaspace.registerNewIbGib.
64
+
65
+ // Note: timeline-api calls metaspace.registerNewIbGib.
66
+ // So we check if metaspace has it.
67
+
68
+ const latestAddr = await metaspace.getLatestAddr({
69
+ ibGib: t0,
70
+ space: metaspace.zeroSpace,
71
+ });
72
+
73
+ iReckon(sir, latestAddr).asTo('latestAddr matches initial').isGonnaBe(t0Addr);
74
+
75
+ // 3. Mutate
76
+ const t1 = await mut8Timeline({
77
+ timeline: t0,
78
+ metaspace,
79
+ space: metaspace.zeroSpace,
80
+ mut8Opts: { dataToAddOrPatch: { n: 1 } }
81
+ });
82
+ const t1Addr = getIbGibAddr({ ibGib: t1 });
83
+
84
+ // 4. Verify latest addr updated
85
+ const latestAddr2 = await metaspace.getLatestAddr({
86
+ ibGib: t0, // asking about t0's latest
87
+ space: metaspace.zeroSpace,
88
+ });
89
+ iReckon(sir, latestAddr2).asTo('latestAddr2 matches mutated').isGonnaBe(t1Addr);
90
+ });
91
+
92
+ });
@@ -51,7 +51,6 @@ import { validateBootstrapIbGib } from './bootstrap/bootstrap-helper.mjs';
51
51
  import { BootstrapData, BootstrapIbGib, BootstrapRel8ns } from './bootstrap/bootstrap-types.mjs';
52
52
  import { newUpMetaStone } from '../../common/meta-stone/meta-stone-helper.mjs';
53
53
  import { WITNESS_ATOM } from '../witness-constants.mjs';
54
- import { SyncSpaceIbGib } from './outer-space/outer-space-types.mjs';
55
54
 
56
55
  let logalot = GLOBAL_LOG_A_LOT;
57
56
 
@@ -1620,6 +1619,7 @@ async function createRootIbGib({
1620
1619
  linkedRel8ns: [Rel8n.past, Rel8n.ancestor],
1621
1620
  tjp: { uuid: true, timestamp: true },
1622
1621
  dna: true,
1622
+ nCounter: true,
1623
1623
  });
1624
1624
  const { newIbGib } = resNewIbGib;
1625
1625
  await persistTransformResult({