laser-sdk 0.9.0.dev2__tar.gz → 0.9.0.dev3__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 (555) hide show
  1. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/Cargo.toml +2 -2
  2. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/PKG-INFO +2 -2
  3. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/README.md +1 -1
  4. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/Cargo.lock +3 -3
  5. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/Cargo.toml +2 -2
  6. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/README.md +1 -1
  7. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/README.md +2 -2
  8. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/pause.rs +19 -3
  9. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/README.md +1 -1
  10. laser_sdk-0.9.0.dev3/wire/fixtures/control_stamped_caller.bin +0 -0
  11. laser_sdk-0.9.0.dev3/wire/fixtures/forwarded_command_agent.bin +0 -0
  12. laser_sdk-0.9.0.dev3/wire/fixtures/forwarded_command_on_behalf_of.bin +0 -0
  13. laser_sdk-0.9.0.dev3/wire/fixtures/mutation_command_caller.bin +0 -0
  14. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/control.rs +6 -0
  15. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/fixtures.rs +4 -0
  16. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/forward.rs +119 -2
  17. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/http.rs +5 -0
  18. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/mutation.rs +6 -0
  19. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/tests/wire_fixtures.rs +126 -8
  20. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/.gitignore +0 -0
  21. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/iggy_test_server.py +0 -0
  22. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/laser_sdk.pyi +0 -0
  23. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/agdx.rs +0 -0
  24. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/agent.rs +0 -0
  25. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/agent_runtime.rs +0 -0
  26. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/async_bridge.rs +0 -0
  27. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/batching.rs +0 -0
  28. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/bin/stub_gen.rs +0 -0
  29. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/blob.rs +0 -0
  30. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/chunks.rs +0 -0
  31. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/client.rs +0 -0
  32. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/codecs.rs +0 -0
  33. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/consumer_group.rs +0 -0
  34. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/context.rs +0 -0
  35. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/control.rs +0 -0
  36. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/convert.rs +0 -0
  37. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/coordination.rs +0 -0
  38. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/crash_context.rs +0 -0
  39. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/destinations.rs +0 -0
  40. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/errors.rs +0 -0
  41. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/filters.rs +0 -0
  42. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/fork.rs +0 -0
  43. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/govern.rs +0 -0
  44. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/graph.rs +0 -0
  45. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/ids.rs +0 -0
  46. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/intent.rs +0 -0
  47. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/interop.rs +0 -0
  48. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/kv.rs +0 -0
  49. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/lib.rs +0 -0
  50. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/memory.rs +0 -0
  51. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/memory_handler.rs +0 -0
  52. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/parity_helpers.rs +0 -0
  53. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/projections.rs +0 -0
  54. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/publish.rs +0 -0
  55. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/query.rs +0 -0
  56. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/rbac.rs +0 -0
  57. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/reader.rs +0 -0
  58. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/registry.rs +0 -0
  59. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/schema.rs +0 -0
  60. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/session.rs +0 -0
  61. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/session_ops.rs +0 -0
  62. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/session_reads.rs +0 -0
  63. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/sign.rs +0 -0
  64. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/snapshot.rs +0 -0
  65. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/state_store.rs +0 -0
  66. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/stream.rs +0 -0
  67. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/swarm.rs +0 -0
  68. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/transport.rs +0 -0
  69. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/typed.rs +0 -0
  70. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/watch.rs +0 -0
  71. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/src/workflow.rs +0 -0
  72. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/tests/conftest.py +0 -0
  73. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/tests/test_addressed_calls.py +0 -0
  74. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/tests/test_agdx_envelope.py +0 -0
  75. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/tests/test_agent_surface.py +0 -0
  76. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/tests/test_callback_bridge.py +0 -0
  77. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/tests/test_close_logging.py +0 -0
  78. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/tests/test_cluster.py +0 -0
  79. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/tests/test_cluster_filters.py +0 -0
  80. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/tests/test_connect_timeout.py +0 -0
  81. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/tests/test_control_builders.py +0 -0
  82. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/tests/test_coordination_client.py +0 -0
  83. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/tests/test_data_surface.py +0 -0
  84. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/tests/test_errors.py +0 -0
  85. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/tests/test_filter_surface.py +0 -0
  86. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/tests/test_filters.py +0 -0
  87. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/tests/test_integration.py +0 -0
  88. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/tests/test_parity.py +0 -0
  89. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/tests/test_parity_helpers.py +0 -0
  90. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/tests/test_pause.py +0 -0
  91. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/tests/test_publish_failures.py +0 -0
  92. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/tests/test_query_wire.py +0 -0
  93. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/tests/test_rbac.py +0 -0
  94. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/tests/test_readme_snippets.py +0 -0
  95. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/tests/test_reconnect.py +0 -0
  96. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/tests/test_record_helpers.py +0 -0
  97. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/tests/test_resource_naming.py +0 -0
  98. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/tests/test_resume_parity.py +0 -0
  99. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/tests/test_smoke.py +0 -0
  100. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/tests/test_snapshot_callbacks.py +0 -0
  101. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/tests/test_trait_hooks.py +0 -0
  102. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/tests/test_workflow_callbacks.py +0 -0
  103. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/foreign/python/uv.lock +0 -0
  104. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/laser_sdk.pyi +0 -0
  105. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/pyproject.toml +0 -0
  106. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/Cargo.toml +0 -0
  107. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/LICENSE +0 -0
  108. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/NOTICE +0 -0
  109. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/certs/laserdata.crt +0 -0
  110. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/a2a.rs +0 -0
  111. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/agent/agdx.rs +0 -0
  112. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/agent/assembler.rs +0 -0
  113. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/agent/budget.rs +0 -0
  114. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/agent/builder.rs +0 -0
  115. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/agent/clock.rs +0 -0
  116. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/agent/consumer.rs +0 -0
  117. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/agent/contract.rs +0 -0
  118. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/agent/control.rs +0 -0
  119. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/agent/ctx.rs +0 -0
  120. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/agent/laser.rs +0 -0
  121. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/agent/lease.rs +0 -0
  122. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/agent/memory_handler.rs +0 -0
  123. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/agent/mod.rs +0 -0
  124. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/agent/partitioning.rs +0 -0
  125. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/agent/pause.rs +0 -0
  126. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/agent/registry.rs +0 -0
  127. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/agent/replies.rs +0 -0
  128. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/agent/router.rs +0 -0
  129. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/agent/scope.rs +0 -0
  130. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/agent/session.rs +0 -0
  131. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/agent/session_ops.rs +0 -0
  132. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/agent/session_reads.rs +0 -0
  133. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/agent/state.rs +0 -0
  134. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/agent/workflow.rs +0 -0
  135. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/agui.rs +0 -0
  136. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/batching.rs +0 -0
  137. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/blob.rs +0 -0
  138. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/bridge_hops.rs +0 -0
  139. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/capabilities.rs +0 -0
  140. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/connect_options.rs +0 -0
  141. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/context.rs +0 -0
  142. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/context_scope.rs +0 -0
  143. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/control.rs +0 -0
  144. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/crash_context.rs +0 -0
  145. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/cursor.rs +0 -0
  146. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/destinations.rs +0 -0
  147. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/edge_auth.rs +0 -0
  148. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/error.rs +0 -0
  149. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/filters/client.rs +0 -0
  150. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/filters/group.rs +0 -0
  151. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/filters/guard.rs +0 -0
  152. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/filters/mod.rs +0 -0
  153. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/filters/progress.rs +0 -0
  154. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/filters/reader.rs +0 -0
  155. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/fork/client.rs +0 -0
  156. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/fork/mod.rs +0 -0
  157. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/govern.rs +0 -0
  158. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/graph.rs +0 -0
  159. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/intent.rs +0 -0
  160. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/kv/client.rs +0 -0
  161. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/kv/coordination.rs +0 -0
  162. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/kv/mod.rs +0 -0
  163. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/laser.rs +0 -0
  164. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/lib.rs +0 -0
  165. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/managed.rs +0 -0
  166. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/mcp.rs +0 -0
  167. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/memory.rs +0 -0
  168. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/message.rs +0 -0
  169. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/nodes.rs +0 -0
  170. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/poll.rs +0 -0
  171. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/prelude.rs +0 -0
  172. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/projections.rs +0 -0
  173. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/provenance/keys.rs +0 -0
  174. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/provenance/mod.rs +0 -0
  175. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/provenance/runtime.rs +0 -0
  176. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/provenance/topic.rs +0 -0
  177. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/publish_options.rs +0 -0
  178. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/query/client.rs +0 -0
  179. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/query/mod.rs +0 -0
  180. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/rbac/mod.rs +0 -0
  181. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/retry.rs +0 -0
  182. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/schema_codecs.rs +0 -0
  183. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/sign.rs +0 -0
  184. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/snapshot.rs +0 -0
  185. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/state_store.rs +0 -0
  186. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/stream/consumer_group.rs +0 -0
  187. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/stream/producer_statistics.rs +0 -0
  188. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/stream/publish.rs +0 -0
  189. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/stream/record.rs +0 -0
  190. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/stream/transport.rs +0 -0
  191. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/stream.rs +0 -0
  192. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/swarm.rs +0 -0
  193. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/testing.rs +0 -0
  194. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/typed.rs +0 -0
  195. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/types/ids.rs +0 -0
  196. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/types/mod.rs +0 -0
  197. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/src/watch.rs +0 -0
  198. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/alloc.rs +0 -0
  199. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/fixtures/retry-table.json +0 -0
  200. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/fixtures/typescript_signature.json +0 -0
  201. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/future_depth.rs +0 -0
  202. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/a2a.rs +0 -0
  203. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/agdx_consume.rs +0 -0
  204. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/agdx_stream.rs +0 -0
  205. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/agui.rs +0 -0
  206. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/budget.rs +0 -0
  207. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/context.rs +0 -0
  208. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/contract.rs +0 -0
  209. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/deadletter.rs +0 -0
  210. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/decomposition.rs +0 -0
  211. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/fanout.rs +0 -0
  212. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/filtered_wait.rs +0 -0
  213. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/filters.rs +0 -0
  214. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/filters_group.rs +0 -0
  215. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/governance.rs +0 -0
  216. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/handoff.rs +0 -0
  217. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/harness.rs +0 -0
  218. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/human_input.rs +0 -0
  219. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/main.rs +0 -0
  220. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/managed_unsupported.rs +0 -0
  221. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/mcp.rs +0 -0
  222. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/memory.rs +0 -0
  223. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/provenance.rs +0 -0
  224. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/queue_pressure.rs +0 -0
  225. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/reconnect.rs +0 -0
  226. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/reliable.rs +0 -0
  227. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/replay.rs +0 -0
  228. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/request.rs +0 -0
  229. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/runtime.rs +0 -0
  230. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/session.rs +0 -0
  231. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/shutdown.rs +0 -0
  232. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/signing.rs +0 -0
  233. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/state.rs +0 -0
  234. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/streaming.rs +0 -0
  235. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/typed_topics.rs +0 -0
  236. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/warm_dedup.rs +0 -0
  237. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/integration/workflow.rs +0 -0
  238. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/signature_interop.rs +0 -0
  239. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/support/owned_server.rs +0 -0
  240. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/sdk/tests/support/test_iggy.rs +0 -0
  241. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/Cargo.toml +0 -0
  242. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/LICENSE +0 -0
  243. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/NOTICE +0 -0
  244. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/accepted_operation.json +0 -0
  245. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_body_ref.bin +0 -0
  246. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_card.bin +0 -0
  247. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_chunk.bin +0 -0
  248. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_chunk_open.bin +0 -0
  249. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_chunk_terminal.bin +0 -0
  250. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_command.bin +0 -0
  251. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_command_signed.bin +0 -0
  252. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_dead_letter.bin +0 -0
  253. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_error.bin +0 -0
  254. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_error_body.bin +0 -0
  255. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_event.bin +0 -0
  256. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_invalid_chunk_late_deadline.bin +0 -0
  257. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_invalid_chunk_no_sequence.bin +0 -0
  258. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_invalid_chunk_open_no_operation.bin +0 -0
  259. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_invalid_command_no_correlation.bin +0 -0
  260. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_invalid_error_last.bin +0 -0
  261. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_invalid_event_task_state.bin +0 -0
  262. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_invalid_response_channel.bin +0 -0
  263. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_invalid_status_bad_operation.bin +0 -0
  264. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_invalid_status_no_operation.bin +0 -0
  265. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_must_understand.bin +0 -0
  266. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_presence.bin +0 -0
  267. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_record.bin +0 -0
  268. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_response.bin +0 -0
  269. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_session_end.bin +0 -0
  270. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_session_parking.bin +0 -0
  271. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_session_start.bin +0 -0
  272. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_session_status.bin +0 -0
  273. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_session_transition.bin +0 -0
  274. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_signature.bin +0 -0
  275. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_status_card.bin +0 -0
  276. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_status_session.bin +0 -0
  277. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_status_task.bin +0 -0
  278. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/agent_usage_cost.bin +0 -0
  279. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/arrow_ipc_metadata.bin +0 -0
  280. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/arrow_ipc_policy.bin +0 -0
  281. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/authz_bind_roles.bin +0 -0
  282. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/authz_get_role_reply.bin +0 -0
  283. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/authz_history_reply.bin +0 -0
  284. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/authz_history_request.bin +0 -0
  285. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/authz_role.bin +0 -0
  286. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/authz_whoami_reply.bin +0 -0
  287. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/backend_announce.bin +0 -0
  288. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/backend_announce_topology.bin +0 -0
  289. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/backend_announce_unavailable.bin +0 -0
  290. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/batch_reply.bin +0 -0
  291. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/batch_request.bin +0 -0
  292. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/browse_projections.json +0 -0
  293. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/browse_reply_decoded.bin +0 -0
  294. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/browse_reply_projections.bin +0 -0
  295. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/browse_reply_schema_registered.bin +0 -0
  296. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/browse_reply_schemas.bin +0 -0
  297. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/browse_schemas.json +0 -0
  298. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/capabilities.json +0 -0
  299. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/change_record.bin +0 -0
  300. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/checkpoint_mutation_replicated.bin +0 -0
  301. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/checkpoint_public_mutation_discriminants.bin +0 -0
  302. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/checkpoint_reply_destination.bin +0 -0
  303. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/checkpoint_reply_query_route.bin +0 -0
  304. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/checkpoint_request_public.bin +0 -0
  305. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/client_metadata_list.bin +0 -0
  306. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/client_metadata_query.bin +0 -0
  307. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/context_compaction.bin +0 -0
  308. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/context_manifest.bin +0 -0
  309. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/context_retrieval.bin +0 -0
  310. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/control_accept_gap.bin +0 -0
  311. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/control_apply_binding.bin +0 -0
  312. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/control_drop_schema.bin +0 -0
  313. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/control_filter_catalog.bin +0 -0
  314. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/control_register_projection.bin +0 -0
  315. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/control_register_schema_avro.bin +0 -0
  316. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/control_register_schema_json.bin +0 -0
  317. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/control_register_schema_protobuf.bin +0 -0
  318. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/control_register_session_source_all.bin +0 -0
  319. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/control_register_session_source_named.bin +0 -0
  320. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/control_remove_binding.bin +0 -0
  321. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/control_remove_session_source.bin +0 -0
  322. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/control_skip_record.bin +0 -0
  323. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/control_stamped_remove_binding.bin +0 -0
  324. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/data_stack_string_discriminants.bin +0 -0
  325. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/decode_record.bin +0 -0
  326. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/destination_checkpoint_status.bin +0 -0
  327. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/destination_issue.json +0 -0
  328. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/destination_page.json +0 -0
  329. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/dispatch_cases.json +0 -0
  330. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/error_body.json +0 -0
  331. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/filter_ack.bin +0 -0
  332. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/filter_ack_unfiltered.bin +0 -0
  333. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/filter_catalog_reply_bound.bin +0 -0
  334. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/filter_catalog_reply_configured.bin +0 -0
  335. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/filter_catalog_reply_registered.bin +0 -0
  336. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/filter_catalog_reply_revision_state.bin +0 -0
  337. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/filter_catalog_reply_revisions.bin +0 -0
  338. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/filter_catalog_reply_unbound.bin +0 -0
  339. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/filter_codec_cases.json +0 -0
  340. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/filter_consumer_filter.bin +0 -0
  341. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/filter_consumer_filter.json +0 -0
  342. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/filter_eval_cases.json +0 -0
  343. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/filter_mutation_configure_group.bin +0 -0
  344. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/filter_mutation_configure_group.json +0 -0
  345. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/filter_mutation_register.bin +0 -0
  346. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/filter_mutation_register.json +0 -0
  347. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/filter_mutation_revision_state.bin +0 -0
  348. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/filter_mutation_revision_state.json +0 -0
  349. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/filter_mutation_unbind_exact.bin +0 -0
  350. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/filter_mutation_unbind_exact.json +0 -0
  351. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/filter_poll_request.bin +0 -0
  352. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/filter_poll_request_group_auto.bin +0 -0
  353. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/filter_poll_request_group_id.bin +0 -0
  354. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/filter_reply_acknowledged.bin +0 -0
  355. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/filter_reply_cancelled.bin +0 -0
  356. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/filter_reply_error.bin +0 -0
  357. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/filter_reply_page.bin +0 -0
  358. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/filter_reply_page_unfiltered.bin +0 -0
  359. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/filter_reply_ready.bin +0 -0
  360. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/filter_reply_revision_disabled.bin +0 -0
  361. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/filter_validation.json +0 -0
  362. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/filter_wait_cancel.bin +0 -0
  363. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/filter_wait_request.bin +0 -0
  364. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/fold_snapshot.bin +0 -0
  365. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/fork_create.bin +0 -0
  366. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/fork_info.json +0 -0
  367. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/fork_put.bin +0 -0
  368. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/fork_reply_created.bin +0 -0
  369. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/forwarded_command.bin +0 -0
  370. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/forwarded_command_positioned.bin +0 -0
  371. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/forwarded_command_scoped.bin +0 -0
  372. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/forwarded_query.bin +0 -0
  373. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/forwarded_query_scoped.bin +0 -0
  374. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/graph_edge.bin +0 -0
  375. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/graph_edge_conversation.bin +0 -0
  376. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/graph_edge_producer.bin +0 -0
  377. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/graph_edge_sourced.bin +0 -0
  378. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/graph_neighbors.bin +0 -0
  379. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/graph_neighbors_conversation.bin +0 -0
  380. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/graph_node.bin +0 -0
  381. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/graph_node_conversation.bin +0 -0
  382. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/graph_node_producer.bin +0 -0
  383. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/graph_node_sourced.bin +0 -0
  384. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/graph_query.bin +0 -0
  385. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/graph_query_conversation.bin +0 -0
  386. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/graph_reply.bin +0 -0
  387. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/graph_upsert.bin +0 -0
  388. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/graph_upsert_session.bin +0 -0
  389. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/header_block_envelope.json +0 -0
  390. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/header_block_generic.json +0 -0
  391. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/hello_reply.bin +0 -0
  392. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/hello_reply_agent.bin +0 -0
  393. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/hello_reply_features.bin +0 -0
  394. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/json_patch/cases.json +0 -0
  395. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/key_record.bin +0 -0
  396. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/kv_cas.bin +0 -0
  397. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/kv_cas_fenced.bin +0 -0
  398. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/kv_cas_session.bin +0 -0
  399. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/kv_copy.bin +0 -0
  400. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/kv_delete_session.bin +0 -0
  401. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/kv_entry_memory_scope.bin +0 -0
  402. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/kv_get_barriered.bin +0 -0
  403. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/kv_lease.bin +0 -0
  404. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/kv_lease_renew.bin +0 -0
  405. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/kv_move.bin +0 -0
  406. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/kv_namespaces.bin +0 -0
  407. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/kv_page_view.json +0 -0
  408. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/kv_patch_session.bin +0 -0
  409. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/kv_release.bin +0 -0
  410. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/kv_reply_committed.bin +0 -0
  411. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/kv_reply_leased.bin +0 -0
  412. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/kv_reply_namespaces.bin +0 -0
  413. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/kv_reply_page.bin +0 -0
  414. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/kv_reply_renewed.bin +0 -0
  415. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/kv_reply_stale.bin +0 -0
  416. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/kv_reply_version_conflict.bin +0 -0
  417. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/kv_scan.bin +0 -0
  418. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/kv_set.bin +0 -0
  419. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/kv_set_session.bin +0 -0
  420. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/logical_schema.bin +0 -0
  421. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/logical_type_discriminants.bin +0 -0
  422. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/managed_read.bin +0 -0
  423. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/managed_reply.bin +0 -0
  424. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/managed_request.bin +0 -0
  425. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/materialization_destination.bin +0 -0
  426. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/memory_feedback_scoped.bin +0 -0
  427. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/memory_forget_scoped.bin +0 -0
  428. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/memory_item_origin.bin +0 -0
  429. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/mutation_command.bin +0 -0
  430. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/mutation_command_scoped.bin +0 -0
  431. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/producer_presence.bin +0 -0
  432. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/query_cancel.bin +0 -0
  433. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/query_envelope.bin +0 -0
  434. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/query_envelope_aggregate.bin +0 -0
  435. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/query_envelope_raw_sql.bin +0 -0
  436. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/query_envelope_read_your_writes.bin +0 -0
  437. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/query_envelope_text.bin +0 -0
  438. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/query_error_discriminants.bin +0 -0
  439. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/query_execution.json +0 -0
  440. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/query_page.bin +0 -0
  441. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/query_reply_err_stale.bin +0 -0
  442. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/query_reply_err_too_large.bin +0 -0
  443. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/query_reply_ok.bin +0 -0
  444. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/query_result.json +0 -0
  445. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/query_route.bin +0 -0
  446. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/query_route_page.json +0 -0
  447. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/query_status.bin +0 -0
  448. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/query_status_reply.bin +0 -0
  449. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/query_target_discriminants.bin +0 -0
  450. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/register_schema_managed.bin +0 -0
  451. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/schema_def.json +0 -0
  452. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_changes.bin +0 -0
  453. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_events.bin +0 -0
  454. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_get.bin +0 -0
  455. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_heartbeat.bin +0 -0
  456. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_http_changes_empty.json +0 -0
  457. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_http_changes_gap.json +0 -0
  458. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_http_changes_legacy.json +0 -0
  459. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_http_changes_no_retained_rows.json +0 -0
  460. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_http_changes_origins.json +0 -0
  461. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_http_changes_page.json +0 -0
  462. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_http_changes_start.json +0 -0
  463. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_http_changes_start_new.json +0 -0
  464. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_http_changes_truncated.json +0 -0
  465. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_http_error.json +0 -0
  466. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_http_events.json +0 -0
  467. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_http_info.json +0 -0
  468. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_http_links.json +0 -0
  469. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_http_page.json +0 -0
  470. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_http_page_rebuilding.json +0 -0
  471. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_http_sources.json +0 -0
  472. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_http_state.json +0 -0
  473. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_link_relation.bin +0 -0
  474. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_link_surface.bin +0 -0
  475. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_links.bin +0 -0
  476. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_list.bin +0 -0
  477. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_ref.bin +0 -0
  478. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_reply_changes.bin +0 -0
  479. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_reply_error.bin +0 -0
  480. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_reply_events.bin +0 -0
  481. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_reply_info.bin +0 -0
  482. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_reply_links.bin +0 -0
  483. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_reply_page.bin +0 -0
  484. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_reply_page_rebuilding.bin +0 -0
  485. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_reply_sources.bin +0 -0
  486. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_reply_state.bin +0 -0
  487. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_sources.bin +0 -0
  488. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_sources_lane_only.bin +0 -0
  489. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/session_state.bin +0 -0
  490. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/snapshot_page.json +0 -0
  491. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/source_ref_generation.bin +0 -0
  492. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/start_policy_discriminants.bin +0 -0
  493. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/state_delta.bin +0 -0
  494. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/state_snapshot.bin +0 -0
  495. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/table_file_page.json +0 -0
  496. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/table_metrics.json +0 -0
  497. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/table_schema_view.json +0 -0
  498. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/table_view.json +0 -0
  499. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/token_estimates.json +0 -0
  500. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/fixtures/typed_value_discriminants.bin +0 -0
  501. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/agent.rs +0 -0
  502. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/arrow.rs +0 -0
  503. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/authz.rs +0 -0
  504. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/batch.rs +0 -0
  505. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/browse.rs +0 -0
  506. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/change.rs +0 -0
  507. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/checkpoint.rs +0 -0
  508. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/clients.rs +0 -0
  509. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/codecs.rs +0 -0
  510. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/codes.rs +0 -0
  511. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/commands.rs +0 -0
  512. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/content.rs +0 -0
  513. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/destination.rs +0 -0
  514. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/dispatch.rs +0 -0
  515. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/encoding.rs +0 -0
  516. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/error.rs +0 -0
  517. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/filter/catalog.rs +0 -0
  518. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/filter/cbor.rs +0 -0
  519. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/filter/codecs.rs +0 -0
  520. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/filter/coerce.rs +0 -0
  521. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/filter/eval.rs +0 -0
  522. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/filter/expr.rs +0 -0
  523. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/filter/headers.rs +0 -0
  524. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/filter/mod.rs +0 -0
  525. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/filter/path.rs +0 -0
  526. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/filter/read.rs +0 -0
  527. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/filter/text.rs +0 -0
  528. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/fork.rs +0 -0
  529. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/framing.rs +0 -0
  530. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/graph.rs +0 -0
  531. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/hashing.rs +0 -0
  532. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/headers.rs +0 -0
  533. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/hello.rs +0 -0
  534. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/http_client.rs +0 -0
  535. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/keys.rs +0 -0
  536. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/kv.rs +0 -0
  537. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/lib.rs +0 -0
  538. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/limits.rs +0 -0
  539. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/memory.rs +0 -0
  540. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/query.rs +0 -0
  541. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/result.rs +0 -0
  542. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/schema.rs +0 -0
  543. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/session.rs +0 -0
  544. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/snapshot.rs +0 -0
  545. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/source.rs +0 -0
  546. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/topics.rs +0 -0
  547. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/topology.rs +0 -0
  548. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/src/validate.rs +0 -0
  549. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/tests/constants.rs +0 -0
  550. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/tests/dispatch.rs +0 -0
  551. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/tests/filter_eval_corpus.rs +0 -0
  552. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/tests/headers.rs +0 -0
  553. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/tests/json_patch.rs +0 -0
  554. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/tests/producer_presence.rs +0 -0
  555. {laser_sdk-0.9.0.dev2 → laser_sdk-0.9.0.dev3}/wire/tests/robustness.rs +0 -0
@@ -8,7 +8,7 @@ edition = "2024"
8
8
  license = "Apache-2.0"
9
9
  repository = "https://github.com/laserdata/laser-sdk"
10
10
  rust-version = "1.98.0"
11
- version = "0.9.0-dev.2"
11
+ version = "0.9.0-dev.3"
12
12
 
13
13
  [workspace.dependencies]
14
14
  apache-avro = { version = "0.22.0" }
@@ -30,7 +30,7 @@ json-patch = { version = "4.2.0" }
30
30
  jsonschema = { version = "0.60.1", default-features = false }
31
31
  laser-sdk = { path = "sdk" }
32
32
  laser-test-support = { path = "test-support" }
33
- laser-wire = { path = "wire", version = "0.9.0-dev.2" }
33
+ laser-wire = { path = "wire", version = "0.9.0-dev.3" }
34
34
  memchr = { version = "2.8.3" }
35
35
  ouroboros = { version = "0.18.5" }
36
36
  prost = { version = "0.14.4" }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: laser-sdk
3
- Version: 0.9.0.dev2
3
+ Version: 0.9.0.dev3
4
4
  Classifier: Programming Language :: Rust
5
5
  Classifier: Programming Language :: Python :: Implementation :: CPython
6
6
  Classifier: Programming Language :: Python :: 3 :: Only
@@ -32,7 +32,7 @@ This package provides the Python Laser SDK for Apache Iggy. [LaserData, Inc.](ht
32
32
 
33
33
  Rust and Python share the data contract and Rust implementation. The bindings expose Python forms of the SDK operations, configuration, and errors. Shared examples and behavior scenarios cover language-neutral behavior.
34
34
 
35
- > This source tree targets `0.9.0-dev.2`. The wire contract and public API use semantic versioning. Before `1.0.0`, minor releases can contain breaking changes.
35
+ > This source tree targets `0.9.0-dev.3`. The wire contract and public API use semantic versioning. Before `1.0.0`, minor releases can contain breaking changes.
36
36
 
37
37
  `spawn_agent(agent_id, ..., consumer_group=None)` separates agent identity from its consumer group. The default group uses the agent ID spelling. Set `consumer_group` when the deployment needs a different group.
38
38
 
@@ -4,7 +4,7 @@ This package provides the Python Laser SDK for Apache Iggy. [LaserData, Inc.](ht
4
4
 
5
5
  Rust and Python share the data contract and Rust implementation. The bindings expose Python forms of the SDK operations, configuration, and errors. Shared examples and behavior scenarios cover language-neutral behavior.
6
6
 
7
- > This source tree targets `0.9.0-dev.2`. The wire contract and public API use semantic versioning. Before `1.0.0`, minor releases can contain breaking changes.
7
+ > This source tree targets `0.9.0-dev.3`. The wire contract and public API use semantic versioning. Before `1.0.0`, minor releases can contain breaking changes.
8
8
 
9
9
  `spawn_agent(agent_id, ..., consumer_group=None)` separates agent identity from its consumer group. The default group uses the agent ID spelling. Set `consumer_group` when the deployment needs a different group.
10
10
 
@@ -2043,7 +2043,7 @@ checksum = "507460a910eb7b32ee961886ff48539633b788a36b65692b95f225b844c82553"
2043
2043
 
2044
2044
  [[package]]
2045
2045
  name = "laser-sdk"
2046
- version = "0.9.0-dev.2"
2046
+ version = "0.9.0-dev.3"
2047
2047
  dependencies = [
2048
2048
  "apache-avro",
2049
2049
  "async-trait",
@@ -2072,7 +2072,7 @@ dependencies = [
2072
2072
 
2073
2073
  [[package]]
2074
2074
  name = "laser-sdk-python"
2075
- version = "0.9.0-dev.2"
2075
+ version = "0.9.0-dev.3"
2076
2076
  dependencies = [
2077
2077
  "async-trait",
2078
2078
  "bytes",
@@ -2091,7 +2091,7 @@ dependencies = [
2091
2091
 
2092
2092
  [[package]]
2093
2093
  name = "laser-wire"
2094
- version = "0.9.0-dev.2"
2094
+ version = "0.9.0-dev.3"
2095
2095
  dependencies = [
2096
2096
  "apache-avro",
2097
2097
  "bon",
@@ -6,7 +6,7 @@ name = "laser-sdk-python"
6
6
  # The Python package version tracks the Rust workspace release train (one
7
7
  # version across laser-wire, laser-sdk, and the Python SDK), and the dependency
8
8
  # below tracks the Rust laser-sdk it wraps.
9
- version = "0.9.0-dev.2"
9
+ version = "0.9.0-dev.3"
10
10
  edition = "2024"
11
11
  license = "Apache-2.0"
12
12
  repository = "https://github.com/laserdata/laser-sdk"
@@ -38,7 +38,7 @@ iggy = { version = "0.11.1-edge.9" }
38
38
  # Path wins for the in-monorepo wheel build. The version lets a source build (an
39
39
  # sdist on a platform with no prebuilt wheel) fetch laser-sdk from crates.io once
40
40
  # it is published. Wheels carry it compiled in and pull nothing at install.
41
- laser-sdk = { path = "../../sdk", version = "0.9.0-dev.2", features = ["a2a-bridge", "agent", "agui", "managed", "mcp-bridge", "provenance", "schema-codecs", "sign", "streaming"] }
41
+ laser-sdk = { path = "../../sdk", version = "0.9.0-dev.3", features = ["a2a-bridge", "agent", "agui", "managed", "mcp-bridge", "provenance", "schema-codecs", "sign", "streaming"] }
42
42
  log = "0.4"
43
43
  pyo3 = { version = "0.29.3", features = ["abi3-py310", "experimental-async", "multiple-pymethods"] }
44
44
  pyo3-async-runtimes = { version = "0.29.0", features = ["attributes", "tokio-runtime"] }
@@ -4,7 +4,7 @@ This package provides the Python Laser SDK for Apache Iggy. [LaserData, Inc.](ht
4
4
 
5
5
  Rust and Python share the data contract and Rust implementation. The bindings expose Python forms of the SDK operations, configuration, and errors. Shared examples and behavior scenarios cover language-neutral behavior.
6
6
 
7
- > This source tree targets `0.9.0-dev.2`. The wire contract and public API use semantic versioning. Before `1.0.0`, minor releases can contain breaking changes.
7
+ > This source tree targets `0.9.0-dev.3`. The wire contract and public API use semantic versioning. Before `1.0.0`, minor releases can contain breaking changes.
8
8
 
9
9
  `spawn_agent(agent_id, ..., consumer_group=None)` separates agent identity from its consumer group. The default group uses the agent ID spelling. Set `consumer_group` when the deployment needs a different group.
10
10
 
@@ -21,9 +21,9 @@ The [`laser-wire`](https://crates.io/crates/laser-wire) crate defines encoded me
21
21
 
22
22
  ```toml
23
23
  [dependencies]
24
- laser-sdk = "0.9.0-dev.2" # typed streaming plus provenance
24
+ laser-sdk = "0.9.0-dev.3" # typed streaming plus provenance
25
25
  # Add only the layers the application uses:
26
- laser-sdk = { version = "0.9.0-dev.2", features = ["agent", "managed"] }
26
+ laser-sdk = { version = "0.9.0-dev.3", features = ["agent", "managed"] }
27
27
  ```
28
28
 
29
29
  ## Quick example
@@ -2,6 +2,7 @@ use crate::harness;
2
2
  use crate::test_iggy::TestIggyCluster;
3
3
  use async_trait::async_trait;
4
4
  use iggy::prelude::{Identifier, StreamClient, TopicClient};
5
+ use iggy_common::calculate_32;
5
6
  use laser_sdk::agent::{ParkedRecords, SessionControl};
6
7
  use laser_sdk::govern::{ActionDecision, ActionGovernor, ActionKind, GovernedAction, GovernorMode};
7
8
  use laser_sdk::prelude::full::*;
@@ -240,9 +241,7 @@ async fn pauses_across_nodes(cluster: &mut TestIggyCluster, stream: &str) {
240
241
  // and resume each one. Every acknowledgment arrives within `bound` of its
241
242
  // request. Returns the control partition of each pause.
242
243
  async fn pause_round(laser: &Laser, seen: &Seen, body: &str, bound: Duration) -> Vec<u32> {
243
- let sessions: Vec<ConversationId> = (0..CLUSTER_SESSIONS)
244
- .map(|_| ConversationId::new())
245
- .collect();
244
+ let sessions = spread_sessions();
246
245
  for session in &sessions {
247
246
  send_work(laser, *session, body).await;
248
247
  }
@@ -261,6 +260,23 @@ async fn pause_round(laser: &Laser, seen: &Seen, body: &str, bound: Duration) ->
261
260
  partitions
262
261
  }
263
262
 
263
+ // Sessions over every control partition, the same number on each, by the key
264
+ // rule Iggy routes a conversation id with. Random ids can all land on one
265
+ // partition, which would leave one primary to pause through.
266
+ fn spread_sessions() -> Vec<ConversationId> {
267
+ let per_partition = CLUSTER_SESSIONS / CLUSTER_PARTITIONS as usize;
268
+ let mut buckets: Vec<Vec<ConversationId>> = vec![Vec::new(); CLUSTER_PARTITIONS as usize];
269
+ while buckets.iter().any(|bucket| bucket.len() < per_partition) {
270
+ let session = ConversationId::new();
271
+ let partition = calculate_32(session.to_string().as_bytes()) % CLUSTER_PARTITIONS;
272
+ let bucket = &mut buckets[partition as usize];
273
+ if bucket.len() < per_partition {
274
+ bucket.push(session);
275
+ }
276
+ }
277
+ buckets.into_iter().flatten().collect()
278
+ }
279
+
264
280
  async fn wait_acknowledged_within(
265
281
  laser: &Laser,
266
282
  session: ConversationId,
@@ -53,7 +53,7 @@ Modules group related types and operations. Features select optional dependencie
53
53
  | `session` | the seven session read requests (each naming its stream first), `SessionReply` with `SessionInfo`, `SessionPage` (whose `rebuilding` says the index is rebuilding or catching up, so the page can be incomplete), `SessionEventsPage`, `SessionStateView`, `SessionLinksView`, `SessionSources`, and `SessionChanges`, the frontier and gap types, `SessionError`, and the process heartbeat body `SessionHeartbeat` |
54
54
  | `dispatch` | the timeline `display_type` mapping, the reliable-consumer `classify` and `classify_generic` dispatch classification, the control operation names, and the addressee filters `addressee_filter(me)` and `broadcast_filter()` with `ADDRESSEE_FILTER_NAME`, the name an agent runtime saves its addressee policy under, pinned by `fixtures/dispatch_cases.json` |
55
55
  | `snapshot` | `FoldSnapshot` names one stream and fold. Sorted `SnapshotOffset` entries pin each topic creation time, partition, and last folded offset. |
56
- | `forward` | the forwarded managed-request frames (`ForwardedQuery`/`ForwardedCommand`, the command carrying the optional stable `operation_id` a mutation forwards under) and the server-stamped `ForwardedScope { stream_id, stream, stream_created_at_micros }` a session command needs |
56
+ | `forward` | the forwarded managed-request frames (`ForwardedQuery`/`ForwardedCommand`, the command carrying the optional stable `operation_id` a mutation forwards under and the agent the calling connection declared, a claim nothing verifies), the server-stamped `ForwardedScope { stream_id, stream, stream_created_at_micros }` a session command needs, and `Caller { user_id, agent, on_behalf_of }`, which control stamps and mutation envelopes carry when a client asked |
57
57
  | `mutation` | the managed mutation identity contract: `ManagedRequestEnvelope` (the client wrapper carrying one nonzero `operation_id` per logical mutation) and `MutationCommandEnvelope` (the durable record a deployment appends and folds, carrying the trusted `scope` into replay). Which codes must carry the identity is the `codes` module's shared `is_idempotent_managed_request` classifier |
58
58
  | `keys` | the versioned managed key record (`KeyRecord`, `KeyKind`, `KEY_RECORD_VERSION`): the one storage representation every port's managed key registry reads and writes |
59
59
  | `commands` | the `Command` trait pairing each code with its request/reply types |
@@ -981,6 +981,11 @@ pub struct ControlStamp {
981
981
  pub stream_generation: Option<ControlStreamGeneration>,
982
982
  /// Identifies the sealing key without revealing it.
983
983
  pub key_id: u64,
984
+ /// The client that asked for the record. Absent on a record the backend or
985
+ /// the streaming server issues on its own, so it tells the root user, id
986
+ /// zero, apart from them.
987
+ #[serde(default, skip_serializing_if = "Option::is_none")]
988
+ pub caller: Option<crate::forward::Caller>,
984
989
  }
985
990
 
986
991
  /// One incarnation of a stream: a deleted and recreated stream has a new
@@ -1532,6 +1537,7 @@ mod wire_tests {
1532
1537
  created_at_micros: 1_700_000_000_000_000,
1533
1538
  }),
1534
1539
  key_id: u64::MAX,
1540
+ caller: None,
1535
1541
  }),
1536
1542
  };
1537
1543
  let back: ControlEnvelope =
@@ -128,6 +128,7 @@ corpus!(
128
128
  "control_register_schema_protobuf.bin",
129
129
  "control_accept_gap.bin",
130
130
  "control_skip_record.bin",
131
+ "control_stamped_caller.bin",
131
132
  "control_stamped_remove_binding.bin",
132
133
  "control_register_session_source_all.bin",
133
134
  "control_register_session_source_named.bin",
@@ -181,6 +182,8 @@ corpus!(
181
182
  "fork_put.bin",
182
183
  "fork_reply_created.bin",
183
184
  "forwarded_command.bin",
185
+ "forwarded_command_agent.bin",
186
+ "forwarded_command_on_behalf_of.bin",
184
187
  "forwarded_command_positioned.bin",
185
188
  "forwarded_command_scoped.bin",
186
189
  "forwarded_query.bin",
@@ -238,6 +241,7 @@ corpus!(
238
241
  "memory_forget_scoped.bin",
239
242
  "memory_item_origin.bin",
240
243
  "mutation_command.bin",
244
+ "mutation_command_caller.bin",
241
245
  "mutation_command_scoped.bin",
242
246
  "query_envelope.bin",
243
247
  "query_envelope_aggregate.bin",
@@ -4,6 +4,24 @@
4
4
 
5
5
  use serde::{Deserialize, Serialize};
6
6
 
7
+ /// Who asked for a request the managed backend records, present only when a
8
+ /// client asked. A record the backend or the streaming server issues on its own
9
+ /// carries none.
10
+ #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
11
+ pub struct Caller {
12
+ /// The authenticated user. The root user is id zero.
13
+ pub user_id: u32,
14
+ /// The agent the caller's connection declared in its presence. A claim the
15
+ /// client makes, never verified.
16
+ #[serde(default, skip_serializing_if = "Option::is_none")]
17
+ pub agent: Option<crate::agent::AgentId>,
18
+ /// The end user an intermediary wrote for, as it named that user in
19
+ /// [`ON_BEHALF_OF_HEADER`](crate::http::ON_BEHALF_OF_HEADER). A claim the
20
+ /// backend records, never verified.
21
+ #[serde(default, skip_serializing_if = "Option::is_none")]
22
+ pub on_behalf_of: Option<String>,
23
+ }
24
+
7
25
  /// Trusted stream identity stamped by the server before forwarding a session request.
8
26
  #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
9
27
  pub struct ForwardedScope {
@@ -19,7 +37,8 @@ pub struct ForwardedQuery {
19
37
  /// Authenticated identity. Audit today, per-user stream scoping later.
20
38
  /// Trusted: set by the server, not the client.
21
39
  pub user_id: u32,
22
- /// Originating client id, for logging and audit only.
40
+ /// Originating client id, for logging and audit only. Never zero for a
41
+ /// client, zero on a request the server issues itself.
23
42
  pub client_id: u128,
24
43
  /// `gen_ai.conversation.id` echoed for the audit log, never used to route.
25
44
  pub correlation: Option<String>,
@@ -50,7 +69,8 @@ pub struct ForwardedCommand {
50
69
  /// Authenticated identity, set by the server. The key-value store scopes its
51
70
  /// rows by this `user_id`, and the SDK cannot set it.
52
71
  pub user_id: u32,
53
- /// Originating client id, for logging and audit only.
72
+ /// The caller's consensus client id, for logging and audit only. Never zero
73
+ /// for a client, zero on a request the server issues itself.
54
74
  pub client_id: u128,
55
75
  /// `gen_ai.conversation.id` echoed for the audit log, never used to route.
56
76
  pub correlation: Option<String>,
@@ -101,6 +121,17 @@ pub struct ForwardedCommand {
101
121
  /// backend refuses a frame whose tenancy differs from its own.
102
122
  #[serde(default, skip_serializing_if = "crate::authz::Tenancy::is_deployment")]
103
123
  pub tenancy: crate::authz::Tenancy,
124
+ /// Set by the server on a mutation a client sent over the binary protocol:
125
+ /// the agent the calling connection declared in its presence. A claim the
126
+ /// client makes, never verified. Absent over HTTP and on the server's own
127
+ /// requests.
128
+ #[serde(default, skip_serializing_if = "Option::is_none")]
129
+ pub agent: Option<crate::agent::AgentId>,
130
+ /// Set by the server from [`ON_BEHALF_OF_HEADER`](crate::http::ON_BEHALF_OF_HEADER)
131
+ /// on an HTTP write: the end user an intermediary wrote for. A claim, never
132
+ /// verified.
133
+ #[serde(default, skip_serializing_if = "Option::is_none")]
134
+ pub on_behalf_of: Option<String>,
104
135
  }
105
136
 
106
137
  #[expect(clippy::trivially_copy_pass_by_ref, reason = "serde skip predicate")]
@@ -159,6 +190,8 @@ mod tests {
159
190
  command_code: 1_000_000,
160
191
  payload: vec![0x90; 5],
161
192
  grants: Vec::new(),
193
+ agent: None,
194
+ on_behalf_of: None,
162
195
  })
163
196
  .expect("encodes");
164
197
  assert!(
@@ -201,9 +234,93 @@ mod tests {
201
234
  command_code: 42,
202
235
  payload: vec![0xde, 0xad, 0xbe, 0xef],
203
236
  grants: Vec::new(),
237
+ agent: None,
238
+ on_behalf_of: None,
204
239
  };
205
240
  let back: ForwardedCommand =
206
241
  decode_named(&encode_named(&command).expect("encodes")).expect("decodes");
207
242
  assert_eq!(back, command);
208
243
  }
244
+
245
+ #[test]
246
+ fn given_a_root_caller_with_an_agent_when_round_tripped_then_should_keep_both() {
247
+ let caller = Caller {
248
+ user_id: 0,
249
+ agent: Some("orbit-planner".parse().expect("agent id")),
250
+ on_behalf_of: None,
251
+ };
252
+
253
+ let back: Caller = decode_named(&encode_named(&caller).expect("encodes")).expect("decodes");
254
+
255
+ assert_eq!(back, caller);
256
+ }
257
+
258
+ #[test]
259
+ fn given_a_caller_written_for_an_end_user_when_round_tripped_then_should_keep_who_it_was_for() {
260
+ let caller = Caller {
261
+ user_id: 3,
262
+ agent: None,
263
+ on_behalf_of: Some("1793690355287073".to_owned()),
264
+ };
265
+
266
+ let back: Caller = decode_named(&encode_named(&caller).expect("encodes")).expect("decodes");
267
+
268
+ assert_eq!(back, caller);
269
+ }
270
+
271
+ #[test]
272
+ fn given_a_caller_with_an_empty_agent_when_decoded_then_should_be_refused() {
273
+ #[derive(serde::Serialize)]
274
+ struct Unchecked<'a> {
275
+ user_id: u32,
276
+ agent: &'a str,
277
+ }
278
+ let frame = encode_named(&Unchecked {
279
+ user_id: 3,
280
+ agent: "",
281
+ })
282
+ .expect("encodes");
283
+
284
+ assert!(decode_named::<Caller>(&frame).is_err());
285
+ }
286
+
287
+ #[test]
288
+ fn given_a_forwarded_command_with_an_agent_when_read_without_the_field_then_should_ignore_it() {
289
+ #[derive(Debug, PartialEq, serde::Deserialize)]
290
+ struct BeforeAgent {
291
+ user_id: u32,
292
+ client_id: u128,
293
+ command_code: u32,
294
+ }
295
+ let command = ForwardedCommand {
296
+ read_barrier: false,
297
+ min_position: None,
298
+ positioned_reply: false,
299
+ min_sessions: Vec::new(),
300
+ tenancy: Default::default(),
301
+ user_id: 0,
302
+ client_id: 9,
303
+ correlation: None,
304
+ operation_id: Some(9),
305
+ read_all: false,
306
+ scope: None,
307
+ command_code: 42,
308
+ payload: vec![1],
309
+ grants: Vec::new(),
310
+ agent: Some("orbit-planner".parse().expect("agent id")),
311
+ on_behalf_of: None,
312
+ };
313
+
314
+ let before: BeforeAgent =
315
+ decode_named(&encode_named(&command).expect("encodes")).expect("decodes");
316
+
317
+ assert_eq!(
318
+ before,
319
+ BeforeAgent {
320
+ user_id: 0,
321
+ client_id: 9,
322
+ command_code: 42,
323
+ }
324
+ );
325
+ }
209
326
  }
@@ -1318,6 +1318,11 @@ pub const PARAM_EXPECT_ABSENT: &str = "expect_absent";
1318
1318
  /// wire constant rather than an unscoped string. Absent means no expiry.
1319
1319
  pub const KV_EXPIRES_AT_MICROS_HEADER: &str = "agdx-expires-at-micros";
1320
1320
 
1321
+ /// Request header an intermediary sets on a managed HTTP write to name the end
1322
+ /// user it writes for. The streaming server forwards it to the backend, which
1323
+ /// records it beside the authenticated user and never trusts it.
1324
+ pub const ON_BEHALF_OF_HEADER: &str = "agdx-on-behalf-of";
1325
+
1321
1326
  /// `GET /agdx/projections` filters. Every field is optional, and an absent field is
1322
1327
  /// omitted from the query string (no empty `topic=`). Field names are the
1323
1328
  /// `PARAM_*` consts verbatim, so the client serializer and the server parser
@@ -191,6 +191,10 @@ pub struct MutationCommandEnvelope {
191
191
  pub scope: Option<crate::forward::ForwardedScope>,
192
192
  #[serde(with = "crate::encoding::bin_bytes")]
193
193
  pub payload: Vec<u8>,
194
+ /// The client that asked for the command. Absent on a command the backend
195
+ /// issues on its own.
196
+ #[serde(default, skip_serializing_if = "Option::is_none")]
197
+ pub caller: Option<crate::forward::Caller>,
194
198
  }
195
199
 
196
200
  impl MutationCommandEnvelope {
@@ -318,6 +322,7 @@ mod tests {
318
322
  command_code: AGDX_KV_SET_CODE,
319
323
  scope: None,
320
324
  payload: vec![0, 1, 2, 255],
325
+ caller: None,
321
326
  };
322
327
  let bytes = encode_named(&envelope).expect("encodes");
323
328
  let back: MutationCommandEnvelope = decode_named(&bytes).expect("decodes");
@@ -362,6 +367,7 @@ mod tests {
362
367
  command_code: AGDX_KV_SET_CODE,
363
368
  scope: None,
364
369
  payload: Vec::new(),
370
+ caller: None,
365
371
  };
366
372
 
367
373
  assert!(request.validate().is_err());
@@ -33,9 +33,10 @@ use laser_wire::checkpoint::{
33
33
  };
34
34
  use laser_wire::clients::{ClientMetadata, ClientMetadataList, ClientMetadataQuery};
35
35
  use laser_wire::codes::{
36
- AGDX_KV_SET_CODE, AGENT_OP_VERSION, AUTHZ_OP_VERSION, BATCH_OP_VERSION, CHANGE_OP_VERSION,
37
- CHECKPOINT_OP_VERSION, CLIENT_METADATA_OP_VERSION, CONTROL_OP_VERSION, FORK_OP_VERSION,
38
- GRAPH_OP_VERSION, KV_LEASE_OP_VERSION, KV_OP_VERSION, QUERY_OP_VERSION,
36
+ AGDX_CONTROL_PUBLISH_CODE, AGDX_KV_SET_CODE, AGENT_OP_VERSION, AUTHZ_OP_VERSION,
37
+ BATCH_OP_VERSION, CHANGE_OP_VERSION, CHECKPOINT_OP_VERSION, CLIENT_METADATA_OP_VERSION,
38
+ CONTROL_OP_VERSION, FORK_OP_VERSION, GRAPH_OP_VERSION, KV_LEASE_OP_VERSION, KV_OP_VERSION,
39
+ QUERY_OP_VERSION,
39
40
  };
40
41
  use laser_wire::content::ContentType;
41
42
  use laser_wire::control::{
@@ -63,7 +64,7 @@ use laser_wire::filter::{
63
64
  use laser_wire::fork::{
64
65
  ForkCreate, ForkInfo, ForkKind, ForkOutcome, ForkPut, ForkReply, ForkStatus,
65
66
  };
66
- use laser_wire::forward::{ForwardedCommand, ForwardedQuery, ForwardedScope};
67
+ use laser_wire::forward::{Caller, ForwardedCommand, ForwardedQuery, ForwardedScope};
67
68
  use laser_wire::framing::{decode_named, encode_named};
68
69
  use laser_wire::graph::{
69
70
  EdgeDir, GraphEdge, GraphNeighbors, GraphNode, GraphQuery, GraphReply, GraphResult,
@@ -117,6 +118,9 @@ use laser_wire::topology::WireTopology;
117
118
  use laser_wire::validate::Validate;
118
119
  use serde::de::DeserializeOwned;
119
120
  use serde::{Deserialize, Serialize};
121
+ use std::collections::BTreeMap;
122
+ use std::io::Read;
123
+ use std::path::{Path as FilePath, PathBuf};
120
124
 
121
125
  #[test]
122
126
  fn given_session_read_requests_when_encoded_then_should_match_golden_fixtures() {
@@ -202,8 +206,6 @@ fn given_session_read_requests_when_encoded_then_should_match_golden_fixtures()
202
206
  laser_wire::framing::decode_named::<session_request::SessionGet>(&missing_stream).is_err()
203
207
  );
204
208
  }
205
- use std::collections::BTreeMap;
206
- use std::path::PathBuf;
207
209
 
208
210
  const REGEN_ENV: &str = "AGDX_WIRE_FIXTURES_REGEN";
209
211
  const TIMESTAMP_MICROS: u64 = 1_717_171_717_000_000;
@@ -445,6 +447,33 @@ fn fixture_path(name: &str) -> PathBuf {
445
447
  .join(name)
446
448
  }
447
449
 
450
+ fn write_fixture(path: &FilePath, encoded: impl AsRef<[u8]>) {
451
+ let mut temporary = path.as_os_str().to_os_string();
452
+ temporary.push(format!(".{}.tmp", std::process::id()));
453
+ let temporary = PathBuf::from(temporary);
454
+ std::fs::write(&temporary, encoded).expect("write fixture");
455
+ std::fs::rename(&temporary, path).expect("replace fixture");
456
+ }
457
+
458
+ #[test]
459
+ fn given_an_open_fixture_when_regenerated_then_should_keep_the_reader_on_a_complete_snapshot() {
460
+ let path = std::env::temp_dir().join(format!("laser-wire-fixture-{}.bin", std::process::id()));
461
+ std::fs::write(&path, b"original fixture").expect("initial fixture");
462
+ let mut reader = std::fs::File::open(&path).expect("open fixture");
463
+
464
+ write_fixture(&path, b"replacement fixture");
465
+
466
+ let mut snapshot = Vec::new();
467
+ reader
468
+ .read_to_end(&mut snapshot)
469
+ .expect("read open fixture");
470
+ let replacement = std::fs::read(&path).expect("read replacement");
471
+ drop(reader);
472
+ std::fs::remove_file(&path).expect("remove fixture");
473
+ assert_eq!(snapshot, b"original fixture");
474
+ assert_eq!(replacement, b"replacement fixture");
475
+ }
476
+
448
477
  fn assert_frame<T>(name: &str, value: &T)
449
478
  where
450
479
  T: Serialize + DeserializeOwned,
@@ -452,7 +481,7 @@ where
452
481
  let encoded = encode_named(value).expect("fixture value serializes");
453
482
  let path = fixture_path(name);
454
483
  if std::env::var(REGEN_ENV).is_ok() {
455
- std::fs::write(&path, &encoded).expect("write fixture");
484
+ write_fixture(&path, &encoded);
456
485
  }
457
486
  let golden = std::fs::read(&path)
458
487
  .unwrap_or_else(|error| panic!("read fixture {name}: {error} (regen with {REGEN_ENV}=1)"));
@@ -473,7 +502,7 @@ where
473
502
  let encoded = serde_json::to_string_pretty(value).expect("fixture value serializes");
474
503
  let path = fixture_path(name);
475
504
  if std::env::var(REGEN_ENV).is_ok() {
476
- std::fs::write(&path, &encoded).expect("write fixture");
505
+ write_fixture(&path, &encoded);
477
506
  }
478
507
  let golden = std::fs::read_to_string(&path)
479
508
  .unwrap_or_else(|error| panic!("read fixture {name}: {error} (regen with {REGEN_ENV}=1)"));
@@ -1567,6 +1596,27 @@ fn given_control_frames_when_encoded_then_should_match_golden_fixtures() {
1567
1596
  created_at_micros: 1_700_000_000_000_000,
1568
1597
  }),
1569
1598
  key_id: 11,
1599
+ caller: None,
1600
+ });
1601
+ stamped
1602
+ });
1603
+ assert_frame("control_stamped_caller.bin", &{
1604
+ let mut stamped = envelope(ControlCommand::DropSchema(4));
1605
+ stamped.stream = Some("fleet".to_owned());
1606
+ stamped.stamp = Some(ControlStamp {
1607
+ deployment_id: 7,
1608
+ actor_user_id: 3,
1609
+ operation_id: 0x0123_4567_89ab_cdef_0123_4567_89ab_cdf0,
1610
+ stream_generation: Some(ControlStreamGeneration {
1611
+ stream_id: 3,
1612
+ created_at_micros: 1_700_000_000_000_000,
1613
+ }),
1614
+ key_id: 11,
1615
+ caller: Some(Caller {
1616
+ user_id: 3,
1617
+ agent: None,
1618
+ on_behalf_of: Some("1793690355287073".to_owned()),
1619
+ }),
1570
1620
  });
1571
1621
  stamped
1572
1622
  });
@@ -2315,6 +2365,50 @@ fn given_forwarded_frames_when_encoded_then_should_match_golden_fixtures() {
2315
2365
  command_code: AGDX_KV_SET_CODE,
2316
2366
  payload: vec![9, 9, 9],
2317
2367
  grants: Vec::new(),
2368
+ agent: None,
2369
+ on_behalf_of: None,
2370
+ },
2371
+ );
2372
+ assert_frame(
2373
+ "forwarded_command_agent.bin",
2374
+ &ForwardedCommand {
2375
+ read_barrier: false,
2376
+ min_position: None,
2377
+ positioned_reply: true,
2378
+ min_sessions: Vec::new(),
2379
+ tenancy: Default::default(),
2380
+ user_id: 0,
2381
+ client_id: 42,
2382
+ correlation: None,
2383
+ operation_id: Some(17),
2384
+ read_all: false,
2385
+ scope: None,
2386
+ command_code: laser_wire::codes::AGDX_FORK_CREATE_CODE,
2387
+ payload: vec![9, 9, 9],
2388
+ grants: Vec::new(),
2389
+ agent: Some("orbit-planner".parse().expect("agent id")),
2390
+ on_behalf_of: None,
2391
+ },
2392
+ );
2393
+ assert_frame(
2394
+ "forwarded_command_on_behalf_of.bin",
2395
+ &ForwardedCommand {
2396
+ read_barrier: false,
2397
+ min_position: None,
2398
+ positioned_reply: false,
2399
+ min_sessions: Vec::new(),
2400
+ tenancy: Default::default(),
2401
+ user_id: 3,
2402
+ client_id: 42,
2403
+ correlation: None,
2404
+ operation_id: Some(18),
2405
+ read_all: false,
2406
+ scope: None,
2407
+ command_code: AGDX_CONTROL_PUBLISH_CODE,
2408
+ payload: vec![9, 9, 9],
2409
+ grants: Vec::new(),
2410
+ agent: None,
2411
+ on_behalf_of: Some("1793690355287073".to_owned()),
2318
2412
  },
2319
2413
  );
2320
2414
  let scope = ForwardedScope {
@@ -2339,6 +2433,8 @@ fn given_forwarded_frames_when_encoded_then_should_match_golden_fixtures() {
2339
2433
  command_code: AGDX_KV_SET_CODE,
2340
2434
  payload: vec![9, 9, 9],
2341
2435
  grants: Vec::new(),
2436
+ agent: None,
2437
+ on_behalf_of: None,
2342
2438
  },
2343
2439
  );
2344
2440
  assert_frame(
@@ -2369,6 +2465,8 @@ fn given_forwarded_frames_when_encoded_then_should_match_golden_fixtures() {
2369
2465
  command_code: laser_wire::codes::AGDX_KV_GET_CODE,
2370
2466
  payload: vec![9, 9, 9],
2371
2467
  grants: Vec::new(),
2468
+ agent: None,
2469
+ on_behalf_of: None,
2372
2470
  },
2373
2471
  );
2374
2472
  assert_frame(
@@ -2569,6 +2667,25 @@ fn given_hello_reply_frame_when_encoded_then_should_match_golden_fixture() {
2569
2667
  expires_at_micros: Some(1_700_000_000_000_000),
2570
2668
  })
2571
2669
  .expect("kv set encodes"),
2670
+ caller: None,
2671
+ },
2672
+ );
2673
+ assert_frame(
2674
+ "mutation_command_caller.bin",
2675
+ &MutationCommandEnvelope {
2676
+ v: FORK_OP_VERSION,
2677
+ operation_id: 44,
2678
+ actor_user_id: 0,
2679
+ deployment_id: 7,
2680
+ timestamp_micros: 1_700_000_000_000_000,
2681
+ command_code: laser_wire::codes::AGDX_FORK_CREATE_CODE,
2682
+ scope: None,
2683
+ payload: vec![9, 9, 9],
2684
+ caller: Some(Caller {
2685
+ user_id: 0,
2686
+ agent: Some("orbit-planner".parse().expect("agent id")),
2687
+ on_behalf_of: None,
2688
+ }),
2572
2689
  },
2573
2690
  );
2574
2691
  assert_frame(
@@ -2586,6 +2703,7 @@ fn given_hello_reply_frame_when_encoded_then_should_match_golden_fixture() {
2586
2703
  stream_created_at_micros: 1_700_000_000_000_000,
2587
2704
  }),
2588
2705
  payload: vec![9, 9, 9],
2706
+ caller: None,
2589
2707
  },
2590
2708
  );
2591
2709
  }