crowdypy 0.14.2.dev1__tar.gz → 0.15.0.dev1__tar.gz

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 (577) hide show
  1. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/MIGRATION.md +13 -0
  2. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/PKG-INFO +5 -2
  3. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/README.md +4 -1
  4. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/docs/compatibility.md +1 -1
  5. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/docs/parity-matrix.md +7 -4
  6. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/native/session_binding.cpp +5 -3
  7. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/pyproject.toml +7 -7
  8. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/udp.py +17 -0
  9. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/stores.py +12 -2
  10. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_version.py +1 -1
  11. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/udp.py +17 -0
  12. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/player_host/schemas.v1.json +2 -2
  13. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/stores.py +12 -2
  14. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/fixtures/player-host.v1.json +2 -2
  15. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_world_session.py +21 -0
  16. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tools/parity/classifications.toml +2 -0
  17. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/uv.lock +1 -1
  18. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/CMakeLists.txt +1 -1
  19. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/PROVENANCE.md +1 -1
  20. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/chunk_store.hpp +7 -3
  21. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/package.json +5 -5
  22. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/crowdy-studio-diagnostics.v1.json +2 -2
  23. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/crowdyjs-studio-layout.v1.json +2 -2
  24. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/.gitattributes +0 -0
  25. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/.gitignore +0 -0
  26. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/.gitleaks.toml +0 -0
  27. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/AGENTS.md +0 -0
  28. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/CMakeLists.txt +0 -0
  29. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/LICENSE +0 -0
  30. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/SECURITY.md +0 -0
  31. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/benchmarks/README.md +0 -0
  32. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/benchmarks/bench_replication.py +0 -0
  33. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/docs/e2e-coverage.md +0 -0
  34. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/licenses/OpenSSL-LICENSE.txt +0 -0
  35. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/native/common.hpp +0 -0
  36. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/native/module.cpp +0 -0
  37. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/native/replication.hpp +0 -0
  38. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/native/replication_binding.cpp +0 -0
  39. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/native/voice_binding.cpp +0 -0
  40. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/native/wire_binding.cpp +0 -0
  41. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/actors/Actor.graphql +0 -0
  42. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/actors/Actors.graphql +0 -0
  43. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/actors/BatchLookupActors.graphql +0 -0
  44. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/actors/CreateActor.graphql +0 -0
  45. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/actors/DeleteActor.graphql +0 -0
  46. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/actors/UpdateActor.graphql +0 -0
  47. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/actors/UpdateActorState.graphql +0 -0
  48. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/AppAccessTiers.graphql +0 -0
  49. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/AppFeatures.graphql +0 -0
  50. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/AppGrantMemberCandidates.graphql +0 -0
  51. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/AppUserAccessByApp.graphql +0 -0
  52. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/ArchiveAccessTier.graphql +0 -0
  53. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/ClaimFreeAppAccess.graphql +0 -0
  54. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/CreateAccessTier.graphql +0 -0
  55. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/DefineAppFeature.graphql +0 -0
  56. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/GrantAppAccess.graphql +0 -0
  57. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/GrantMyAppAccess.graphql +0 -0
  58. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/GrantTierFeature.graphql +0 -0
  59. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/MyAppAccess.graphql +0 -0
  60. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/RevokeAppAccess.graphql +0 -0
  61. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/RevokeTierFeature.graphql +0 -0
  62. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/RuntimePermissions.graphql +0 -0
  63. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/SuspendAppAccess.graphql +0 -0
  64. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/TierFeatures.graphql +0 -0
  65. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/appAccess/UpdateAccessTier.graphql +0 -0
  66. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/apps/App.graphql +0 -0
  67. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/apps/AppBySlug.graphql +0 -0
  68. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/apps/AppDiscovery.graphql +0 -0
  69. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/apps/AppsForOrg.graphql +0 -0
  70. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/apps/ArchiveApp.graphql +0 -0
  71. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/apps/CodeAdmissions.graphql +0 -0
  72. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/apps/CreateApp.graphql +0 -0
  73. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/apps/MarketplaceApps.graphql +0 -0
  74. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/apps/MyApps.graphql +0 -0
  75. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/apps/PlaceableDatacenters.graphql +0 -0
  76. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/apps/UpdateApp.graphql +0 -0
  77. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/auth/Logout.graphql +0 -0
  78. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/auth/LogoutAllDevices.graphql +0 -0
  79. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/avatars/Avatars.graphql +0 -0
  80. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/billing/AppBudget.graphql +0 -0
  81. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/billing/AppBudgets.graphql +0 -0
  82. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/billing/SetAppBudget.graphql +0 -0
  83. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/billing/WalletBalance.graphql +0 -0
  84. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/billing/WalletTransactions.graphql +0 -0
  85. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/AddChannelMember.graphql +0 -0
  86. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/BanChannelMember.graphql +0 -0
  87. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/Channel.graphql +0 -0
  88. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/ChannelMembers.graphql +0 -0
  89. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/ChannelPolicy.graphql +0 -0
  90. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/ChannelRoles.graphql +0 -0
  91. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/Channels.graphql +0 -0
  92. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/CreateChannel.graphql +0 -0
  93. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/CreateChannelRole.graphql +0 -0
  94. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/DeleteChannel.graphql +0 -0
  95. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/DeleteChannelRole.graphql +0 -0
  96. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/JoinChannel.graphql +0 -0
  97. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/LeaveChannel.graphql +0 -0
  98. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/MyChannels.graphql +0 -0
  99. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/RemoveChannelMember.graphql +0 -0
  100. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/RequestToJoinChannel.graphql +0 -0
  101. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/SetChannelMemberRoles.graphql +0 -0
  102. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/SetChannelPolicy.graphql +0 -0
  103. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/UnbanChannelMember.graphql +0 -0
  104. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/UpdateChannel.graphql +0 -0
  105. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/channels/UpdateChannelRole.graphql +0 -0
  106. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/chunks/GetChunk.graphql +0 -0
  107. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/chunks/GetChunkLods.graphql +0 -0
  108. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/chunks/GetChunksByDistance.graphql +0 -0
  109. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/chunks/GetVoxelList.graphql +0 -0
  110. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/chunks/UpdateChunk.graphql +0 -0
  111. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/chunks/UpdateChunkLods.graphql +0 -0
  112. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/chunks/UpdateChunkState.graphql +0 -0
  113. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/crowdyStudio/CrowdyStudio.graphql +0 -0
  114. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/exec/Exec.graphql +0 -0
  115. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/gameApps/GameApps.graphql +0 -0
  116. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/grids/CreateGridChannel.graphql +0 -0
  117. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/grids/GridChannels.graphql +0 -0
  118. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/grids/MintGridToken.graphql +0 -0
  119. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/host/Host.graphql +0 -0
  120. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/inputLog/InputLogMessages.graphql +0 -0
  121. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/inputLog/InputLogSessions.graphql +0 -0
  122. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/marketplace/Marketplace.graphql +0 -0
  123. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/CreateOrgRole.graphql +0 -0
  124. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/CreateOrgToken.graphql +0 -0
  125. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/CreateOrganization.graphql +0 -0
  126. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/DeleteOrgRole.graphql +0 -0
  127. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/InviteOrgMember.graphql +0 -0
  128. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/MemberRoles.graphql +0 -0
  129. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/MyOrganizations.graphql +0 -0
  130. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/OrgMembers.graphql +0 -0
  131. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/OrgPermissions.graphql +0 -0
  132. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/OrgRoles.graphql +0 -0
  133. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/OrgTokens.graphql +0 -0
  134. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/Organization.graphql +0 -0
  135. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/OrganizationBySlug.graphql +0 -0
  136. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/RemoveOrgMember.graphql +0 -0
  137. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/RevokeOrgToken.graphql +0 -0
  138. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/UpdateOrgMemberRoles.graphql +0 -0
  139. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/UpdateOrgRole.graphql +0 -0
  140. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/organizations/UpdateOrgToken.graphql +0 -0
  141. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/payments/CapturePaypalCheckout.graphql +0 -0
  142. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/payments/CreateCheckout.graphql +0 -0
  143. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/payments/MyCheckouts.graphql +0 -0
  144. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/platform/PlatformConfig.graphql +0 -0
  145. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/playerWallet/PlayerWallet.graphql +0 -0
  146. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/quotas/DeleteQuota.graphql +0 -0
  147. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/quotas/EffectiveQuota.graphql +0 -0
  148. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/quotas/QuotasForApp.graphql +0 -0
  149. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/quotas/QuotasForOrg.graphql +0 -0
  150. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/quotas/SetQuota.graphql +0 -0
  151. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/serverStatus/ActiveGraphQLServers.graphql +0 -0
  152. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/serverStatus/GameClientBootstrap.graphql +0 -0
  153. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/serverStatus/GraphqlServers.graphql +0 -0
  154. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/serverStatus/ServerWithLeastClients.graphql +0 -0
  155. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/serverStatus/VersionInfo.graphql +0 -0
  156. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/sharedEnvironment/SharedEnvironment.graphql +0 -0
  157. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/state/DeleteUserAppState.graphql +0 -0
  158. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/state/UpdateUserAppState.graphql +0 -0
  159. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/state/UserAppState.graphql +0 -0
  160. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/state/UserAppStates.graphql +0 -0
  161. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/AddTeamMember.graphql +0 -0
  162. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/BanTeamMember.graphql +0 -0
  163. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/CreateTeam.graphql +0 -0
  164. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/CreateTeamRole.graphql +0 -0
  165. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/DeleteTeam.graphql +0 -0
  166. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/DeleteTeamRole.graphql +0 -0
  167. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/JoinTeam.graphql +0 -0
  168. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/LeaveTeam.graphql +0 -0
  169. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/MyTeams.graphql +0 -0
  170. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/RemoveTeamMember.graphql +0 -0
  171. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/RequestToJoinTeam.graphql +0 -0
  172. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/SetTeamMemberRoles.graphql +0 -0
  173. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/SetTeamPolicy.graphql +0 -0
  174. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/Team.graphql +0 -0
  175. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/TeamMembers.graphql +0 -0
  176. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/TeamPolicy.graphql +0 -0
  177. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/TeamRoles.graphql +0 -0
  178. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/Teams.graphql +0 -0
  179. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/UnbanTeamMember.graphql +0 -0
  180. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/UpdateTeam.graphql +0 -0
  181. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teams/UpdateTeamRole.graphql +0 -0
  182. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/teleport/TeleportRequest.graphql +0 -0
  183. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/usage/AppGraphqlOperations.graphql +0 -0
  184. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/usage/AppUsageSummary.graphql +0 -0
  185. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/usage/PlayerPulse.graphql +0 -0
  186. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/users/DeleteMyAccount.graphql +0 -0
  187. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/users/FreePlayWindow.graphql +0 -0
  188. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/users/Me.graphql +0 -0
  189. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/users/PlayerProfile.graphql +0 -0
  190. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/users/UpdateGamertag.graphql +0 -0
  191. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/users/UpdateUserState.graphql +0 -0
  192. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/users/User.graphql +0 -0
  193. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/voxels/ListVoxelUpdatesByDistance.graphql +0 -0
  194. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/voxels/ListVoxels.graphql +0 -0
  195. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/voxels/RollbackVoxelUpdates.graphql +0 -0
  196. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/voxels/UpdateVoxel.graphql +0 -0
  197. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/operations/voxels/VoxelUpdateHistory.graphql +0 -0
  198. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/schema.gql +0 -0
  199. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/scripts/_pins.py +0 -0
  200. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/scripts/ci/assert_default_origin.py +0 -0
  201. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/scripts/ci/build_openssl.sh +0 -0
  202. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/scripts/ci/check_content_policy.py +0 -0
  203. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/scripts/ci/check_pin_tiers.py +0 -0
  204. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/scripts/ci/cibw_before_all_linux.sh +0 -0
  205. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/scripts/ci/resolve-release-tier.sh +0 -0
  206. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/scripts/ci/resolve-release-tier.test.sh +0 -0
  207. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/scripts/ci/resolve_pypi_version.py +0 -0
  208. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/scripts/ci/stamp_version.py +0 -0
  209. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/scripts/ci/verify_artifacts.py +0 -0
  210. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/scripts/codegen.py +0 -0
  211. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/scripts/schema_drift.py +0 -0
  212. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/scripts/schema_sync.py +0 -0
  213. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/scripts/unasync.py +0 -0
  214. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/scripts/vendor_crowdycpp.py +0 -0
  215. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/__init__.py +0 -0
  216. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_concurrency.py +0 -0
  217. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_default_origin.py +0 -0
  218. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_generated/__init__.py +0 -0
  219. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_generated/enums.py +0 -0
  220. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_generated/inputs.py +0 -0
  221. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_generated/operations.py +0 -0
  222. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_grid.py +0 -0
  223. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_native.pyi +0 -0
  224. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_operation.py +0 -0
  225. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/__init__.py +0 -0
  226. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/client.py +0 -0
  227. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/__init__.py +0 -0
  228. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/_base.py +0 -0
  229. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/actors.py +0 -0
  230. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/admin.py +0 -0
  231. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/app_access.py +0 -0
  232. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/apps.py +0 -0
  233. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/auth.py +0 -0
  234. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/avatars.py +0 -0
  235. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/billing.py +0 -0
  236. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/channels.py +0 -0
  237. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/chunks.py +0 -0
  238. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/crowdy_studio.py +0 -0
  239. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/crowdy_studio_agent.py +0 -0
  240. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/crowdy_studio_github.py +0 -0
  241. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/discovery.py +0 -0
  242. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/exec.py +0 -0
  243. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/game_apps.py +0 -0
  244. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/grids.py +0 -0
  245. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/host.py +0 -0
  246. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/input_log.py +0 -0
  247. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/marketplace.py +0 -0
  248. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/organizations.py +0 -0
  249. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/payments.py +0 -0
  250. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/platform.py +0 -0
  251. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/player_wallet.py +0 -0
  252. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/portal.py +0 -0
  253. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/quotas.py +0 -0
  254. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/server_status.py +0 -0
  255. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/shared_environment.py +0 -0
  256. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/state.py +0 -0
  257. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/teams.py +0 -0
  258. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/teleport.py +0 -0
  259. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/usage.py +0 -0
  260. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/users.py +0 -0
  261. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/domains/voxels.py +0 -0
  262. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/graphql.py +0 -0
  263. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/grid_scope.py +0 -0
  264. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/__init__.py +0 -0
  265. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/actions.py +0 -0
  266. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/kit.py +0 -0
  267. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/mirror.py +0 -0
  268. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/__init__.py +0 -0
  269. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/arenas.py +0 -0
  270. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/encounters.py +0 -0
  271. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/instances.py +0 -0
  272. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/leaderboards.py +0 -0
  273. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/market.py +0 -0
  274. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/matchmaking.py +0 -0
  275. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/minigames.py +0 -0
  276. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/npcs.py +0 -0
  277. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/player.py +0 -0
  278. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/presence.py +0 -0
  279. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/racing.py +0 -0
  280. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/sessions.py +0 -0
  281. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/tables.py +0 -0
  282. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/tactics.py +0 -0
  283. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/territory.py +0 -0
  284. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/modules/world.py +0 -0
  285. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/protocol.py +0 -0
  286. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/realtime.py +0 -0
  287. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/runtime.py +0 -0
  288. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/social.py +0 -0
  289. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/store.py +0 -0
  290. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/topology.py +0 -0
  291. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/kit/wire.py +0 -0
  292. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/rediscover.py +0 -0
  293. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/_sync/world.py +0 -0
  294. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/auth_state.py +0 -0
  295. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/client.py +0 -0
  296. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/codecs.py +0 -0
  297. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/datacenter_redirect.py +0 -0
  298. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/__init__.py +0 -0
  299. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/_base.py +0 -0
  300. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/actors.py +0 -0
  301. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/admin.py +0 -0
  302. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/app_access.py +0 -0
  303. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/apps.py +0 -0
  304. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/auth.py +0 -0
  305. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/avatars.py +0 -0
  306. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/billing.py +0 -0
  307. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/channels.py +0 -0
  308. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/chunks.py +0 -0
  309. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/crowdy_studio.py +0 -0
  310. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/crowdy_studio_agent.py +0 -0
  311. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/crowdy_studio_github.py +0 -0
  312. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/discovery.py +0 -0
  313. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/exec.py +0 -0
  314. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/game_apps.py +0 -0
  315. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/grids.py +0 -0
  316. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/host.py +0 -0
  317. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/input_log.py +0 -0
  318. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/marketplace.py +0 -0
  319. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/organizations.py +0 -0
  320. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/payments.py +0 -0
  321. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/platform.py +0 -0
  322. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/player_wallet.py +0 -0
  323. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/portal.py +0 -0
  324. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/quotas.py +0 -0
  325. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/server_status.py +0 -0
  326. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/shared_environment.py +0 -0
  327. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/state.py +0 -0
  328. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/teams.py +0 -0
  329. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/teleport.py +0 -0
  330. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/usage.py +0 -0
  331. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/users.py +0 -0
  332. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/domains/voxels.py +0 -0
  333. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/enums.py +0 -0
  334. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/errors.py +0 -0
  335. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/estate.py +0 -0
  336. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/exec_gateway.py +0 -0
  337. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/graphql.py +0 -0
  338. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/grid_scope.py +0 -0
  339. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/inputs.py +0 -0
  340. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/__init__.py +0 -0
  341. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/actions.py +0 -0
  342. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/kit.py +0 -0
  343. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/mirror.py +0 -0
  344. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/__init__.py +0 -0
  345. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/arenas.py +0 -0
  346. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/encounters.py +0 -0
  347. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/instances.py +0 -0
  348. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/leaderboards.py +0 -0
  349. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/market.py +0 -0
  350. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/matchmaking.py +0 -0
  351. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/minigames.py +0 -0
  352. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/npcs.py +0 -0
  353. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/player.py +0 -0
  354. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/presence.py +0 -0
  355. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/racing.py +0 -0
  356. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/sessions.py +0 -0
  357. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/tables.py +0 -0
  358. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/tactics.py +0 -0
  359. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/territory.py +0 -0
  360. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/modules/world.py +0 -0
  361. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/protocol.py +0 -0
  362. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/realtime.py +0 -0
  363. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/runtime.py +0 -0
  364. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/social.py +0 -0
  365. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/store.py +0 -0
  366. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/topology.py +0 -0
  367. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/kit/wire.py +0 -0
  368. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/lb_cookie.py +0 -0
  369. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/media.py +0 -0
  370. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/pkce.py +0 -0
  371. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/player_host/__init__.py +0 -0
  372. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/player_host/agent_errors.py +0 -0
  373. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/player_host/agent_types.py +0 -0
  374. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/player_host/json_schema.py +0 -0
  375. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/player_host/schemas.py +0 -0
  376. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/player_host/types.py +0 -0
  377. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/py.typed +0 -0
  378. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/rediscover.py +0 -0
  379. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/replication.py +0 -0
  380. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/session.py +0 -0
  381. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/studio/__init__.py +0 -0
  382. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/studio/client_tick_interval.py +0 -0
  383. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/studio/controller.py +0 -0
  384. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/studio/diagnostics.py +0 -0
  385. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/studio/github_new_repo.py +0 -0
  386. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/studio/layout.py +0 -0
  387. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/studio/models.py +0 -0
  388. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/studio/starter_projects.py +0 -0
  389. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/subscriptions.py +0 -0
  390. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/sync.py +0 -0
  391. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/utils.py +0 -0
  392. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/wire.py +0 -0
  393. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/src/crowdypy/world.py +0 -0
  394. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/conftest.py +0 -0
  395. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/e2e/__init__.py +0 -0
  396. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/e2e/conftest.py +0 -0
  397. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/e2e/test_e2e_identity.py +0 -0
  398. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/e2e/test_e2e_input_log.py +0 -0
  399. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/e2e/test_e2e_open_grid_exec_gateway.py +0 -0
  400. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/e2e/test_e2e_ranged_channel.py +0 -0
  401. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/e2e/test_e2e_replication.py +0 -0
  402. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/e2e/test_e2e_studio.py +0 -0
  403. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/e2e/test_e2e_world.py +0 -0
  404. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/e2e/test_e2e_world_data.py +0 -0
  405. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/fixtures/README.md +0 -0
  406. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/fixtures/binary-wire-fixtures.json +0 -0
  407. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/fixtures/exec-client-frames.json +0 -0
  408. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/fixtures/kit-protocol.json +0 -0
  409. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/fixtures/voice-frames.json +0 -0
  410. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/__init__.py +0 -0
  411. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/domains/__init__.py +0 -0
  412. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/domains/test_crowdycpp_roots.py +0 -0
  413. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/domains/test_input_log_reads.py +0 -0
  414. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/domains/test_org_domains.py +0 -0
  415. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/domains/test_social_domains.py +0 -0
  416. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/domains/test_studio_exec_domains.py +0 -0
  417. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/domains/test_world_domains.py +0 -0
  418. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_check_pin_tiers.py +0 -0
  419. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_core.py +0 -0
  420. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_durable_stores.py +0 -0
  421. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_estate_moves.py +0 -0
  422. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_exec_gateway.py +0 -0
  423. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_fixture_provenance.py +0 -0
  424. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_grid_scope.py +0 -0
  425. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_kit.py +0 -0
  426. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_kit_protocol.py +0 -0
  427. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_lazy_exports.py +0 -0
  428. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_player_host.py +0 -0
  429. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_refusals.py +0 -0
  430. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_release_versions.py +0 -0
  431. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_replication.py +0 -0
  432. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_sdk_audience.py +0 -0
  433. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_studio_controller.py +0 -0
  434. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_studio_diagnostics.py +0 -0
  435. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_studio_layout.py +0 -0
  436. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_subscriptions.py +0 -0
  437. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_transport.py +0 -0
  438. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_udp_api.py +0 -0
  439. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_voice_frames.py +0 -0
  440. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tests/unit/test_wire.py +0 -0
  441. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tools/e2e/provision.py +0 -0
  442. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tools/fixtures/player_host.mjs +0 -0
  443. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/tools/parity/parity.py +0 -0
  444. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/LICENSE +0 -0
  445. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/cmake/CheckPublicHeaders.cmake +0 -0
  446. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/cmake/CrowdyCPPConfig.cmake.in +0 -0
  447. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/cmake/CrowdyFindOpus.cmake +0 -0
  448. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/cmake/studio_layout_fixture.hpp.in +0 -0
  449. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/client.hpp +0 -0
  450. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/base64.hpp +0 -0
  451. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/bytes.hpp +0 -0
  452. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/clock.hpp +0 -0
  453. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/crypto.hpp +0 -0
  454. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/logger.hpp +0 -0
  455. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/result.hpp +0 -0
  456. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/spsc.hpp +0 -0
  457. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/core/uuid.hpp +0 -0
  458. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/crowdy.hpp +0 -0
  459. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/default_origin.hpp +0 -0
  460. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/admin.hpp +0 -0
  461. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/auth.hpp +0 -0
  462. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/crowdy_studio.hpp +0 -0
  463. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/crowdy_studio_agent.hpp +0 -0
  464. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/crowdy_studio_github.hpp +0 -0
  465. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/discovery.hpp +0 -0
  466. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/domain_base.hpp +0 -0
  467. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/exec.hpp +0 -0
  468. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/game_apps.hpp +0 -0
  469. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/grids.hpp +0 -0
  470. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/groups.hpp +0 -0
  471. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/marketplace.hpp +0 -0
  472. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/player_wallet.hpp +0 -0
  473. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/portal.hpp +0 -0
  474. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/realtime_control.hpp +0 -0
  475. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/server_status.hpp +0 -0
  476. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/types.hpp +0 -0
  477. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/users.hpp +0 -0
  478. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/domains/world_data.hpp +0 -0
  479. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/generated/enums.hpp +0 -0
  480. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/generated/operations.hpp +0 -0
  481. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/async_scope.hpp +0 -0
  482. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/auth_state.hpp +0 -0
  483. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/cancel.hpp +0 -0
  484. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/datacenter_redirect.hpp +0 -0
  485. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/dispatcher.hpp +0 -0
  486. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/errors.hpp +0 -0
  487. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/estate.hpp +0 -0
  488. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/graphql_client.hpp +0 -0
  489. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/http.hpp +0 -0
  490. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/json.hpp +0 -0
  491. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/rediscover.hpp +0 -0
  492. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/subscription_client.hpp +0 -0
  493. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/graphql/websocket.hpp +0 -0
  494. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/actions.hpp +0 -0
  495. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/economy.hpp +0 -0
  496. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/genres.hpp +0 -0
  497. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/kit.hpp +0 -0
  498. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/mirror.hpp +0 -0
  499. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/modules.hpp +0 -0
  500. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/protocol.hpp +0 -0
  501. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/realtime.hpp +0 -0
  502. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/runtime.hpp +0 -0
  503. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/social.hpp +0 -0
  504. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/topology.hpp +0 -0
  505. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/kit/wire.hpp +0 -0
  506. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/media/opus.hpp +0 -0
  507. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/media/video_frames.hpp +0 -0
  508. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/media/voice_frames.hpp +0 -0
  509. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/player_host/adapter.hpp +0 -0
  510. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/player_host/player_host.hpp +0 -0
  511. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/player_host/schemas.hpp +0 -0
  512. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/player_host/types.hpp +0 -0
  513. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/replication/connection.hpp +0 -0
  514. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/replication/session_provider.hpp +0 -0
  515. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/replication/types.hpp +0 -0
  516. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/replication/udp_socket.hpp +0 -0
  517. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/codec.hpp +0 -0
  518. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/durable.hpp +0 -0
  519. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/keys.hpp +0 -0
  520. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/stores.hpp +0 -0
  521. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/session/world_session.hpp +0 -0
  522. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/controller.hpp +0 -0
  523. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/diagnostics.hpp +0 -0
  524. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/editor.hpp +0 -0
  525. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/github.hpp +0 -0
  526. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/github_layout.hpp +0 -0
  527. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/integration.hpp +0 -0
  528. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/layout.hpp +0 -0
  529. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/models.hpp +0 -0
  530. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/studio/runtime.hpp +0 -0
  531. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/wire/codec.hpp +0 -0
  532. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/wire/protocol.hpp +0 -0
  533. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/include/crowdy/world.hpp +0 -0
  534. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/client.cpp +0 -0
  535. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/core/base64.cpp +0 -0
  536. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/core/clock.cpp +0 -0
  537. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/core/crypto_default_unavailable.cpp +0 -0
  538. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/core/crypto_openssl.cpp +0 -0
  539. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/core/crypto_unavailable.cpp +0 -0
  540. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/core/logger.cpp +0 -0
  541. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/core/uuid.cpp +0 -0
  542. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/domains/exec.cpp +0 -0
  543. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/graphql/async_transport.cpp +0 -0
  544. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/graphql/auth_state.cpp +0 -0
  545. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/graphql/error_extensions.hpp +0 -0
  546. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/graphql/errors.cpp +0 -0
  547. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/graphql/graphql_client.cpp +0 -0
  548. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/graphql/http_curl.cpp +0 -0
  549. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/graphql/http_none.cpp +0 -0
  550. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/graphql/json.cpp +0 -0
  551. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/graphql/subscription_client.cpp +0 -0
  552. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/graphql/websocket_curl.cpp +0 -0
  553. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/graphql/websocket_none.cpp +0 -0
  554. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/kit/economy.cpp +0 -0
  555. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/kit/genres.cpp +0 -0
  556. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/kit/mirror.cpp +0 -0
  557. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/kit/modules.cpp +0 -0
  558. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/kit/protocol.cpp +0 -0
  559. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/kit/runtime.cpp +0 -0
  560. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/kit/topology.cpp +0 -0
  561. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/media/opus.cpp +0 -0
  562. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/player_host/schemas.cpp +0 -0
  563. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/player_host/types.cpp +0 -0
  564. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/replication/connection.cpp +0 -0
  565. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/replication/socket_errors.hpp +0 -0
  566. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/replication/udp_socket.cpp +0 -0
  567. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/session/world_session.cpp +0 -0
  568. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/studio/diagnostics.cpp +0 -0
  569. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/studio/editor.cpp +0 -0
  570. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/src/studio/integration.cpp +0 -0
  571. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/third_party/yyjson/LICENSE +0 -0
  572. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/third_party/yyjson/yyjson.c +0 -0
  573. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/third_party/yyjson/yyjson.h +0 -0
  574. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/exec-client-frames.json +0 -0
  575. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/exec-gateway-cases.json +0 -0
  576. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/kit-protocol.json +0 -0
  577. {crowdypy-0.14.2.dev1 → crowdypy-0.15.0.dev1}/vendor/CrowdyCPP/tools/parity/fixtures/voice-frames.json +0 -0
@@ -3,6 +3,19 @@
3
3
  CrowdyPy is pre-1.0. Within a minor line, patch releases keep source compatibility; each
4
4
  new minor may change the API. Read the section for every minor you skip.
5
5
 
6
+ ## 0.15.0
7
+
8
+ CrowdyJS 18.15.0 and CrowdyCPP 0.67.4. Additive.
9
+
10
+ - **`chunks.set_voxel(..., optimistic=False)`**, CrowdyJS's `setVoxel({ optimistic: false })`:
11
+ nothing changes locally and nothing is queued for write-back; the edit is applied when the
12
+ server's echo of it arrives, so the cache holds only what the server accepted. The default
13
+ (`True`) is the edit as before. The native core carries the flag since CrowdyCPP 0.67.4
14
+ (`ChunkStore::setVoxel(..., optimistic)`).
15
+ - **`client.udp.send_generic_spatial(chunk, uuid, payload)`**: an app-defined spatial message
16
+ (opcode 140) that the actors near `chunk` receive as `generic_spatial`; CrowdyJS 18.15.0's
17
+ `udp.sendGenericSpatial`. The replication connection had `send_generic_spatial` already.
18
+
6
19
  ## 0.14.2
7
20
 
8
21
  CrowdyJS 18.14.0 and CrowdyCPP 0.67.3. No breaking change. `PlayerWalletAPI.charges()` is
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: crowdypy
3
- Version: 0.14.2.dev1
3
+ Version: 0.15.0.dev1
4
4
  Summary: Official Python SDK for Crowded Kingdoms: typed GraphQL clients and a native UDP replication core
5
5
  Keywords: crowded-kingdoms,multiplayer,replication,graphql,sdk,udp
6
6
  Author: Crowded Kingdoms
@@ -51,6 +51,8 @@ CrowdyPy follows the [CrowdyJS](https://github.com/CrowdedKingdoms/CrowdyJS) API
51
51
  client, bound with [nanobind](https://github.com/wjakob/nanobind) and shipped inside the
52
52
  wheel. Python never touches a datagram.
53
53
 
54
+ **v0.15.0: a voxel edit that waits for the server, and opcode 140 from `client.udp`.** `chunks.set_voxel(..., optimistic=False)` changes nothing locally until the server's echo of the edit arrives; `client.udp.send_generic_spatial` sends an app-defined spatial message. CrowdyJS 18.15.0 and CrowdyCPP 0.67.4. See [MIGRATION.md](MIGRATION.md).
55
+
54
56
  **v0.14.2: CrowdyJS 18.14.0 and CrowdyCPP 0.67.3.** `player_wallet.charges()` is deprecated: read `transactions()`, whose `usage_debit` entries are the usage charges.
55
57
 
56
58
  **v0.14.1: the exec socket names a paused app and a switched-off app or type.** `AppPaused`, `AppDisabled`, and `TypeDisabled`. Still CrowdyJS 18.13.0 and CrowdyCPP 0.66.0.
@@ -326,7 +328,8 @@ states = pose.decode_many(snapshot.state_offsets, snapshot.state_data) # numpy,
326
328
  `session.chunks` is a helper for 16x16x16 chunks with one byte per voxel. An edit that grid
327
329
  cannot hold (a type outside 0-255, a position outside 0-15) is kept in the chunk's
328
330
  `overlay()`, and `voxel_type_at` reads it first. The echo of your own `set_voxel` is not
329
- applied a second time. A game with other addressing reads every edit from
331
+ applied a second time; with `optimistic=False` the edit is applied only when that echo arrives,
332
+ and nothing is queued for write-back. A game with other addressing reads every edit from
330
333
  `session.on("voxel_update", ...)`, which includes those echoes.
331
334
 
332
335
  ## Game Kit
@@ -11,6 +11,8 @@ CrowdyPy follows the [CrowdyJS](https://github.com/CrowdedKingdoms/CrowdyJS) API
11
11
  client, bound with [nanobind](https://github.com/wjakob/nanobind) and shipped inside the
12
12
  wheel. Python never touches a datagram.
13
13
 
14
+ **v0.15.0: a voxel edit that waits for the server, and opcode 140 from `client.udp`.** `chunks.set_voxel(..., optimistic=False)` changes nothing locally until the server's echo of the edit arrives; `client.udp.send_generic_spatial` sends an app-defined spatial message. CrowdyJS 18.15.0 and CrowdyCPP 0.67.4. See [MIGRATION.md](MIGRATION.md).
15
+
14
16
  **v0.14.2: CrowdyJS 18.14.0 and CrowdyCPP 0.67.3.** `player_wallet.charges()` is deprecated: read `transactions()`, whose `usage_debit` entries are the usage charges.
15
17
 
16
18
  **v0.14.1: the exec socket names a paused app and a switched-off app or type.** `AppPaused`, `AppDisabled`, and `TypeDisabled`. Still CrowdyJS 18.13.0 and CrowdyCPP 0.66.0.
@@ -286,7 +288,8 @@ states = pose.decode_many(snapshot.state_offsets, snapshot.state_data) # numpy,
286
288
  `session.chunks` is a helper for 16x16x16 chunks with one byte per voxel. An edit that grid
287
289
  cannot hold (a type outside 0-255, a position outside 0-15) is kept in the chunk's
288
290
  `overlay()`, and `voxel_type_at` reads it first. The echo of your own `set_voxel` is not
289
- applied a second time. A game with other addressing reads every edit from
291
+ applied a second time; with `optimistic=False` the edit is applied only when that echo arrives,
292
+ and nothing is queued for write-back. A game with other addressing reads every edit from
290
293
  `session.on("voxel_update", ...)`, which includes those echoes.
291
294
 
292
295
  ## Game Kit
@@ -5,7 +5,7 @@ are in `pyproject.toml` (`[project].version`, `[tool.crowdypy.crowdyjs]`,
5
5
  `[tool.crowdypy.crowdycpp]`); `tests/unit/test_release_versions.py` refuses this page when
6
6
  its version disagrees.
7
7
 
8
- - CrowdyPy `0.14.2`
8
+ - CrowdyPy `0.15.0`
9
9
  - API surface: CrowdyJS (the pinned version and commit in `pyproject.toml`); the generated
10
10
  `docs/parity-matrix.md` lists every covered method, every native equivalent and every
11
11
  browser exclusion with its reason. The gate is strict: there are no portable gaps, and a
@@ -4,16 +4,16 @@ Generated by `tools/parity/parity.py`; do not edit by hand. Classifications live
4
4
 
5
5
  ## Target
6
6
 
7
- - CrowdyJS: `18.14.0` at `9abcdf86c2b0440f113c8b7f15bd38fb23f51117`
8
- - CrowdyCPP (native core): `0.67.3` at `f09fc0b174b90e739f7128400792d5679e621b9b`
7
+ - CrowdyJS: `18.15.0` at `e21b61e79a1a509b81826fc8db2282c107b2e0ea`
8
+ - CrowdyCPP (native core): `0.67.4` at `830a700b99223555c7d687d5471825701f3dbdf8`
9
9
  - schema.gql identical to CrowdyJS's: yes
10
10
  - Gate mode: strict portable parity (every portable gap is release-blocking)
11
11
 
12
12
  ## Summary
13
13
 
14
- - Covered: 1352
14
+ - Covered: 1353
15
15
  - Portable gap: 0
16
- - Native equivalent: 44
16
+ - Native equivalent: 46
17
17
  - Browser exclusion: 113
18
18
  - Deprecated roots: 2
19
19
  - Unclassified: 0
@@ -1342,6 +1342,7 @@ Generated by `tools/parity/parity.py`; do not edit by hand. Classifications live
1342
1342
  | `UdpAPI.sendChannelMessage` | covered |
1343
1343
  | `UdpAPI.sendClientEvent` | covered |
1344
1344
  | `UdpAPI.sendClientEventAndWait` | covered |
1345
+ | `UdpAPI.sendGenericSpatial` | covered |
1345
1346
  | `UdpAPI.sendRangedChannelMessage` | covered |
1346
1347
  | `UdpAPI.sendSingleActorMessage` | covered |
1347
1348
  | `UdpAPI.sendTextPacket` | covered |
@@ -1431,6 +1432,7 @@ Generated by `tools/parity/parity.py`; do not edit by hand. Classifications live
1431
1432
  | `EXEC_CLOSE_ACCESS_ENDED` | covered |
1432
1433
  | `EXEC_STATUSES` | covered |
1433
1434
  | `ExecModScope` | covered |
1435
+ | `GENERIC_SPATIAL_MAX_PAYLOAD_BYTES` | native equivalent — the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.MAX_LONG_SPATIAL_PAYLOAD |
1434
1436
  | `GLUE_HOST_CALL_REQUEST_MAX_BYTES` | browser exclusion — glue that instantiates player WASM inside the browser Web Worker (CLIENT ABI imports, ck_fuel, watchdog) |
1435
1437
  | `GLUE_HOST_FUNCTIONS` | browser exclusion — glue that instantiates player WASM inside the browser Web Worker (CLIENT ABI imports, ck_fuel, watchdog) |
1436
1438
  | `GLUE_INVOKE_REPLY_MAX_BYTES` | browser exclusion — glue that instantiates player WASM inside the browser Web Worker (CLIENT ABI imports, ck_fuel, watchdog) |
@@ -1532,6 +1534,7 @@ Generated by `tools/parity/parity.py`; do not edit by hand. Classifications live
1532
1534
  | `serializeChannelAudio` | native equivalent — the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.encode_channel_audio |
1533
1535
  | `serializeChannelMessage` | native equivalent — the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.encode_channel_message with the message type |
1534
1536
  | `serializeClientEvent` | native equivalent — the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.encode_long_spatial with the message type |
1537
+ | `serializeGenericSpatial` | native equivalent — the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.encode_long_spatial with the message type |
1535
1538
  | `serializeRangedChannelMessage` | native equivalent — the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.encode_ranged_channel_message |
1536
1539
  | `serializeSingleActorMessage` | native equivalent — the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.encode_long_spatial with the message type |
1537
1540
  | `serializeTextPacket` | native equivalent — the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.encode_long_spatial with the message type |
@@ -518,7 +518,7 @@ class PySession {
518
518
  }
519
519
 
520
520
  int setVoxel(std::int64_t x, std::int64_t y, std::int64_t z, int vx, int vy, int vz,
521
- int voxelType, nb::handle state) {
521
+ int voxelType, nb::handle state, bool optimistic) {
522
522
  BufferView body(state);
523
523
  const std::int16_t type = i16_arg(voxelType, "voxel type");
524
524
  Result<std::uint8_t> result = Errc::InvalidArgument;
@@ -526,7 +526,8 @@ class PySession {
526
526
  nb::gil_scoped_release release;
527
527
  std::lock_guard lock(conn_.consumerMutex());
528
528
  auto& s = live();
529
- result = s.chunks().setVoxel(coord_of(x, y, z), vx, vy, vz, type, body.bytes(), s.actorUuid());
529
+ result = s.chunks().setVoxel(coord_of(x, y, z), vx, vy, vz, type, body.bytes(), s.actorUuid(),
530
+ optimistic);
530
531
  if (result.ok()) s.errors().recordSend(result.value(), session::SendKind::VoxelUpdate, s.actorUuid());
531
532
  }
532
533
  return sent(result, "setVoxel");
@@ -798,7 +799,8 @@ void register_session(nb::module_& m) {
798
799
  .def("voxel_state_at", &PySession::voxelStateAt, nb::arg("x"), nb::arg("y"), nb::arg("z"),
799
800
  nb::arg("vx"), nb::arg("vy"), nb::arg("vz"))
800
801
  .def("set_voxel", &PySession::setVoxel, nb::arg("x"), nb::arg("y"), nb::arg("z"),
801
- nb::arg("vx"), nb::arg("vy"), nb::arg("vz"), nb::arg("voxel_type"), nb::arg("state"))
802
+ nb::arg("vx"), nb::arg("vy"), nb::arg("vz"), nb::arg("voxel_type"), nb::arg("state"),
803
+ nb::arg("optimistic") = true)
802
804
  .def("seed", &PySession::seed, nb::arg("x"), nb::arg("y"), nb::arg("z"), nb::arg("voxels"))
803
805
  .def("hydrate", &PySession::hydrate, nb::arg("x"), nb::arg("y"), nb::arg("z"),
804
806
  nb::arg("voxels"), nb::arg("entries"))
@@ -4,7 +4,7 @@ build-backend = "scikit_build_core.build"
4
4
 
5
5
  [project]
6
6
  name = "crowdypy"
7
- version = "0.14.2.dev1"
7
+ version = "0.15.0.dev1"
8
8
  description = "Official Python SDK for Crowded Kingdoms: typed GraphQL clients and a native UDP replication core"
9
9
  readme = "README.md"
10
10
  license = "MIT AND Apache-2.0"
@@ -119,14 +119,14 @@ environment = { OPENSSL_ROOT_DIR = "C:/vcpkg/installed/x64-windows-static-md" }
119
119
  # --------------------------------------------------------------------------------------
120
120
 
121
121
  [tool.crowdypy.crowdyjs]
122
- version = "18.14.0"
123
- commit = "9abcdf86c2b0440f113c8b7f15bd38fb23f51117"
122
+ version = "18.15.0"
123
+ commit = "e21b61e79a1a509b81826fc8db2282c107b2e0ea"
124
124
 
125
125
  [tool.crowdypy.crowdycpp]
126
- version = "0.67.3"
127
- tag = "dev/v0.67.3"
128
- commit = "f09fc0b174b90e739f7128400792d5679e621b9b"
129
- tree-sha256 = "f0456195cc0948d96f8d7d987f2742722218c35ce60bbe9a34dfa3b9e6303541"
126
+ version = "0.67.4"
127
+ tag = "dev/v0.67.4"
128
+ commit = "830a700b99223555c7d687d5471825701f3dbdf8"
129
+ tree-sha256 = "8f1857cc216193cf861bce48b7df975a2e0e93563d45736c4fb2584fcd26d009"
130
130
 
131
131
  # schema.gql and operations/ are CrowdyJS's, copied from the commit pinned above by
132
132
  # scripts/schema_sync.py, which records these hashes and re-derives them in CI.
@@ -365,6 +365,23 @@ class UdpAPI:
365
365
  connection.flush_sends()
366
366
  return connection.wait_for_sequence(sequence, uuid, timeout)
367
367
 
368
+ def send_generic_spatial(
369
+ self,
370
+ chunk: Sequence[int],
371
+ uuid: str,
372
+ payload: Any,
373
+ *,
374
+ distance: int = 8,
375
+ decay: int = DecayRate.NONE,
376
+ ) -> int:
377
+ """An app-defined spatial message (opcode 140): the server fans it out to the actors
378
+ near ``chunk`` without reading ``payload`` (at most ``wire.MAX_LONG_SPATIAL_PAYLOAD``,
379
+ 1,123 bytes), and they receive it as ``generic_spatial``. CrowdyJS's
380
+ ``udp.sendGenericSpatial`` (18.15.0) and CrowdyCPP's ``Connection::sendGenericSpatial``."""
381
+ return self._live().send_generic_spatial(
382
+ chunk, uuid, payload, distance=distance, decay=decay
383
+ )
384
+
368
385
  def send_single_actor_message(self, chunk: Sequence[int], uuid: str, payload: Any) -> int:
369
386
  """A direct message to one actor: ``chunk`` and ``uuid`` address the TARGET. Not echoed."""
370
387
  return self._live().send_single_actor_message(chunk, uuid, payload)
@@ -739,6 +739,8 @@ class ChunkStore:
739
739
  z: int,
740
740
  voxel_type: int,
741
741
  state: Any = None,
742
+ *,
743
+ optimistic: bool = True,
742
744
  ) -> int:
743
745
  """Apply an edit locally, replicate it, and queue the chunk for write-back. Returns
744
746
  the send's sequence number.
@@ -746,15 +748,23 @@ class ChunkStore:
746
748
  The position and type are the app's signed 16-bit values; one the dense grid cannot
747
749
  hold is kept in the :meth:`overlay`. The encoded state is at most 1,024 bytes. Raises
748
750
  ``ValueError`` for anything else, before anything changes or is sent. The server's
749
- echo of the edit is not applied again."""
751
+ echo of the edit is not applied again.
752
+
753
+ ``optimistic=False`` (CrowdyJS's ``optimistic: false``) changes nothing locally and
754
+ queues nothing for write-back: the edit is applied when the server's echo of it
755
+ arrives, so the cache holds only what the server accepted."""
750
756
  coord = _coord(chunk)
751
757
  encoded = self._voxel_codec.encode(state) if state is not None else b""
752
758
  assert_voxel_edit((x, y, z), voxel_type, encoded)
753
- sequence: int = self._session._native.set_voxel(*coord, x, y, z, voxel_type, encoded)
759
+ sequence: int = self._session._native.set_voxel(
760
+ *coord, x, y, z, voxel_type, encoded, optimistic
761
+ )
754
762
  self._session.track_send(
755
763
  {"kind": "voxelUpdate", "sequence": sequence, "sent_at": _now_ms(),
756
764
  "uuid": self._session.actor_uuid, "detail": {"chunk": coord, "x": x, "y": y, "z": z}}
757
765
  ) # fmt: skip
766
+ if not optimistic:
767
+ return sequence
758
768
  meta = self._entry(coord)
759
769
  if meta.load_state in ("loading", "missing"):
760
770
  meta.load_state = "seeded"
@@ -1,3 +1,3 @@
1
1
  """The CrowdyPy release this source tree builds."""
2
2
 
3
- __version__ = "0.14.2"
3
+ __version__ = "0.15.0"
@@ -371,6 +371,23 @@ class UdpAPI:
371
371
  connection.flush_sends()
372
372
  return await connection.wait_for_sequence(sequence, uuid, timeout)
373
373
 
374
+ async def send_generic_spatial(
375
+ self,
376
+ chunk: Sequence[int],
377
+ uuid: str,
378
+ payload: Any,
379
+ *,
380
+ distance: int = 8,
381
+ decay: int = DecayRate.NONE,
382
+ ) -> int:
383
+ """An app-defined spatial message (opcode 140): the server fans it out to the actors
384
+ near ``chunk`` without reading ``payload`` (at most ``wire.MAX_LONG_SPATIAL_PAYLOAD``,
385
+ 1,123 bytes), and they receive it as ``generic_spatial``. CrowdyJS's
386
+ ``udp.sendGenericSpatial`` (18.15.0) and CrowdyCPP's ``Connection::sendGenericSpatial``."""
387
+ return self._live().send_generic_spatial(
388
+ chunk, uuid, payload, distance=distance, decay=decay
389
+ )
390
+
374
391
  async def send_single_actor_message(self, chunk: Sequence[int], uuid: str, payload: Any) -> int:
375
392
  """A direct message to one actor: ``chunk`` and ``uuid`` address the TARGET. Not echoed."""
376
393
  return self._live().send_single_actor_message(chunk, uuid, payload)
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "crowdyJs": {
3
- "version": "18.14.0",
4
- "commit": "9abcdf86c2b0440f113c8b7f15bd38fb23f51117"
3
+ "version": "18.15.0",
4
+ "commit": "e21b61e79a1a509b81826fc8db2282c107b2e0ea"
5
5
  },
6
6
  "schemas": {
7
7
  "GAME_COMMAND_RESULT_SCHEMA_V1": {
@@ -851,6 +851,8 @@ class ChunkStore:
851
851
  z: int,
852
852
  voxel_type: int,
853
853
  state: Any = None,
854
+ *,
855
+ optimistic: bool = True,
854
856
  ) -> int:
855
857
  """Apply an edit locally, replicate it, and queue the chunk for write-back. Returns
856
858
  the send's sequence number.
@@ -858,15 +860,23 @@ class ChunkStore:
858
860
  The position and type are the app's signed 16-bit values; one the dense grid cannot
859
861
  hold is kept in the :meth:`overlay`. The encoded state is at most 1,024 bytes. Raises
860
862
  ``ValueError`` for anything else, before anything changes or is sent. The server's
861
- echo of the edit is not applied again."""
863
+ echo of the edit is not applied again.
864
+
865
+ ``optimistic=False`` (CrowdyJS's ``optimistic: false``) changes nothing locally and
866
+ queues nothing for write-back: the edit is applied when the server's echo of it
867
+ arrives, so the cache holds only what the server accepted."""
862
868
  coord = _coord(chunk)
863
869
  encoded = self._voxel_codec.encode(state) if state is not None else b""
864
870
  assert_voxel_edit((x, y, z), voxel_type, encoded)
865
- sequence: int = self._session._native.set_voxel(*coord, x, y, z, voxel_type, encoded)
871
+ sequence: int = self._session._native.set_voxel(
872
+ *coord, x, y, z, voxel_type, encoded, optimistic
873
+ )
866
874
  self._session.track_send(
867
875
  {"kind": "voxelUpdate", "sequence": sequence, "sent_at": _now_ms(),
868
876
  "uuid": self._session.actor_uuid, "detail": {"chunk": coord, "x": x, "y": y, "z": z}}
869
877
  ) # fmt: skip
878
+ if not optimistic:
879
+ return sequence
870
880
  meta = self._entry(coord)
871
881
  if meta.load_state in ("loading", "missing"):
872
882
  meta.load_state = "seeded"
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "fixtureVersion": 1,
3
3
  "crowdyJs": {
4
- "version": "18.14.0",
5
- "commit": "9abcdf86c2b0440f113c8b7f15bd38fb23f51117"
4
+ "version": "18.15.0",
5
+ "commit": "e21b61e79a1a509b81826fc8db2282c107b2e0ea"
6
6
  },
7
7
  "errorCodes": [
8
8
  "AGENT_DISABLED",
@@ -417,6 +417,27 @@ def test_the_echo_of_your_own_edit_is_applied_once(chunk: Any) -> None:
417
417
  assert session.chunks.voxel_type_at(at, 1, 2, 3) == 8
418
418
 
419
419
 
420
+ def test_an_edit_that_is_not_optimistic_waits_for_its_echo(chunk: Any) -> None:
421
+ server, connection, session, seen = chunk
422
+ at = (0, 0, 0)
423
+ session.chunks.seed(at, bytes(4096), write_back=False)
424
+ changed: list[Any] = []
425
+ session.chunks.on_chunk_changed(changed.append)
426
+ sequence = session.chunks.set_voxel(at, 1, 2, 3, 9, optimistic=False)
427
+ sent = server.recv()
428
+ assert wire.parse_voxel_payload(sent.payload) == (1, 2, 3, 9, b"")
429
+ session.tick()
430
+ assert changed == [], "nothing changes before the echo"
431
+ assert session.chunks.voxel_type_at(at, 1, 2, 3) == 0
432
+ assert session.chunks.pending_write_backs == 0
433
+
434
+ voxel(server, ME, (1, 2, 3), 9, sequence)
435
+ pump_until(session, connection, lambda: len(seen) == 1)
436
+ tick_until(session, lambda: len(changed) == 1)
437
+ assert session.chunks.voxel_type_at(at, 1, 2, 3) == 9
438
+ assert session.chunks.pending_write_backs == 0, "the echo is the server's, not a local edit"
439
+
440
+
420
441
  def test_a_wide_local_edit_is_kept_in_the_overlay_and_sent_as_it_is(chunk: Any) -> None:
421
442
  server, connection, session, seen = chunk
422
443
  at = (0, 0, 0)
@@ -139,6 +139,7 @@ GraphQLClient = "AsyncGraphQLClient"
139
139
 
140
140
  # --- native-equivalent
141
141
  "BUNDLE_HEADER_BYTES" = { kind = "native-equivalent", reason = "the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.bundle() / split_datagram(), which own the bundle layout" }
142
+ "GENERIC_SPATIAL_MAX_PAYLOAD_BYTES" = { kind = "native-equivalent", reason = "the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.MAX_LONG_SPATIAL_PAYLOAD" }
142
143
  "BUNDLE_LENGTH_PREFIX_BYTES" = { kind = "native-equivalent", reason = "the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.bundle() / split_datagram(), which own the bundle layout" }
143
144
  "execWireIntegers" = { kind = "native-equivalent", reason = "msgspec writes a Python int as a msgpack integer of its width, so there is no float for a hub's integer field to refuse; @msgpack/msgpack writes a JS number of 2^32 or more as a float without it" }
144
145
  "BrowserLocalStorageTokenStore" = { kind = "native-equivalent", reason = "token persistence is TokenStore / SessionStore; the localStorage backing is browser-only, and FileTokenStore mirrors its session / app key split" }
@@ -161,6 +162,7 @@ GraphQLClient = "AsyncGraphQLClient"
161
162
  "serializeChannelAudio" = { kind = "native-equivalent", reason = "the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.encode_channel_audio" }
162
163
  "serializeChannelMessage" = { kind = "native-equivalent", reason = "the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.encode_channel_message with the message type" }
163
164
  "serializeClientEvent" = { kind = "native-equivalent", reason = "the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.encode_long_spatial with the message type" }
165
+ "serializeGenericSpatial" = { kind = "native-equivalent", reason = "the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.encode_long_spatial with the message type" }
164
166
  "serializeRangedChannelMessage" = { kind = "native-equivalent", reason = "the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.encode_ranged_channel_message" }
165
167
  "serializeSingleActorMessage" = { kind = "native-equivalent", reason = "the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.encode_long_spatial with the message type" }
166
168
  "serializeTextPacket" = { kind = "native-equivalent", reason = "the same codec, CrowdyCPP's, through crowdypy.wire: crowdypy.wire.encode_long_spatial with the message type" }
@@ -103,7 +103,7 @@ wheels = [
103
103
 
104
104
  [[package]]
105
105
  name = "crowdypy"
106
- version = "0.14.2"
106
+ version = "0.15.0"
107
107
  source = { editable = "." }
108
108
  dependencies = [
109
109
  { name = "httpx" },
@@ -1,5 +1,5 @@
1
1
  cmake_minimum_required(VERSION 3.22)
2
- project(CrowdyCPP VERSION 0.67.3 LANGUAGES C CXX)
2
+ project(CrowdyCPP VERSION 0.67.4 LANGUAGES C CXX)
3
3
 
4
4
  set(CMAKE_CXX_STANDARD 20)
5
5
  set(CMAKE_CXX_STANDARD_REQUIRED ON)
@@ -5,4 +5,4 @@ pins under `[tool.crowdypy.crowdycpp]`. It is written by
5
5
  `scripts/vendor_crowdycpp.py` and checked in CI by re-deriving it from that commit.
6
6
  Do not edit it: change CrowdyCPP, release it on the same tier, and re-vendor.
7
7
 
8
- Vendored from `dev/v0.67.3` (`f09fc0b174b90e739f7128400792d5679e621b9b`).
8
+ Vendored from `dev/v0.67.4` (`830a700b99223555c7d687d5471825701f3dbdf8`).
@@ -328,19 +328,23 @@ class ChunkStore {
328
328
  /// The server delivers every accepted edit back to its sender (Buddy v0.37.0);
329
329
  /// ingest() matches that echo to this edit (sender uuid + sequence + voxel) and
330
330
  /// does not apply it again, so a local edit fires onChunkChanged once.
331
+ ///
332
+ /// `optimistic` false (CrowdyJS `setVoxel({ optimistic: false })`, 0.67.4) changes
333
+ /// nothing locally and marks nothing for write-back: the edit is applied when its echo
334
+ /// arrives, so the cache shows only what the server accepted.
331
335
  Result<std::uint8_t> setVoxel(const ChunkCoord& coord, int x, int y, int z,
332
336
  std::int16_t voxelType, Bytes voxelState,
333
- const core::ActorUuid& uuid) {
337
+ const core::ActorUuid& uuid, bool optimistic = true) {
334
338
  if (!fitsInt16(x) || !fitsInt16(y) || !fitsInt16(z)) return Errc::InvalidArgument;
335
339
  if (voxelState.size() > wire::voxel::kMaxStateSize) return Errc::InvalidArgument;
336
- applyLocal(coord, x, y, z, voxelType, voxelState);
340
+ if (optimistic) applyLocal(coord, x, y, z, voxelType, voxelState);
337
341
  auto seq = conn_.sendVoxelUpdate(coord, uuid, static_cast<std::int16_t>(x),
338
342
  static_cast<std::int16_t>(y), static_cast<std::int16_t>(z),
339
343
  voxelType, voxelState, options_.voxelSendDistance);
340
344
  if (seq.ok()) {
341
345
  rememberEdit(coord, voxelKey(static_cast<std::int16_t>(x), static_cast<std::int16_t>(y),
342
346
  static_cast<std::int16_t>(z)),
343
- PendingEdit{uuid, seq.value(), nowMs(), false});
347
+ PendingEdit{uuid, seq.value(), nowMs(), /*stale=*/!optimistic});
344
348
  }
345
349
  return seq;
346
350
  }
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "crowdycpp-maintainer-tools",
3
- "version": "0.67.3",
3
+ "version": "0.67.4",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "Offline parity and schema maintenance tools for CrowdyCPP",
7
7
  "crowdyjsParityTarget": {
8
- "version": "18.14.0",
9
- "commit": "9abcdf86c2b0440f113c8b7f15bd38fb23f51117"
8
+ "version": "18.15.0",
9
+ "commit": "e21b61e79a1a509b81826fc8db2282c107b2e0ea"
10
10
  },
11
11
  "scripts": {
12
12
  "codegen": "node scripts/codegen.mjs",
@@ -29,8 +29,8 @@
29
29
  },
30
30
  "publishedSchemaSnapshot": {
31
31
  "url": "https://docs.crowdedkingdoms.com/schema/game-api.graphql",
32
- "sourceBlob": "3e465b261b718cdafc6a23a7a4d40e83c95c8b9f",
32
+ "sourceBlob": "ad8c0dea9e2f3eea8185901274294514931500fc",
33
33
  "snapshotSha256": "d46a770eff50f8ef6584f5ed937e8347d6f7121da7337469b8d99213fc9a7281",
34
- "syncedAt": "2026-10-20T04:26:56.289Z"
34
+ "syncedAt": "2026-10-20T07:30:56.926Z"
35
35
  }
36
36
  }
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "contractVersion": "crowdy.studio-diagnostics/1",
3
3
  "crowdyJs": {
4
- "version": "18.14.0",
5
- "commit": "9abcdf86c2b0440f113c8b7f15bd38fb23f51117"
4
+ "version": "18.15.0",
5
+ "commit": "e21b61e79a1a509b81826fc8db2282c107b2e0ea"
6
6
  },
7
7
  "cases": [
8
8
  {
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "fixtureVersion": 1,
3
3
  "crowdyJs": {
4
- "version": "18.14.0",
5
- "commit": "9abcdf86c2b0440f113c8b7f15bd38fb23f51117"
4
+ "version": "18.15.0",
5
+ "commit": "e21b61e79a1a509b81826fc8db2282c107b2e0ea"
6
6
  },
7
7
  "storageKey": "ck:crowdy-studio:layout:v1",
8
8
  "paneIds": [
File without changes
File without changes