graphrefly 0.2.0__tar.gz → 0.3.0__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 (283) hide show
  1. {graphrefly-0.2.0 → graphrefly-0.3.0}/CHANGELOG.md +16 -0
  2. {graphrefly-0.2.0 → graphrefly-0.3.0}/PKG-INFO +4 -4
  3. {graphrefly-0.2.0 → graphrefly-0.3.0}/README.md +3 -3
  4. {graphrefly-0.2.0 → graphrefly-0.3.0}/docs/optimizations.md +8 -0
  5. {graphrefly-0.2.0 → graphrefly-0.3.0}/docs/roadmap.md +3 -3
  6. {graphrefly-0.2.0 → graphrefly-0.3.0}/pyproject.toml +1 -1
  7. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/extra/__init__.py +12 -0
  8. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/extra/adapters.py +1344 -0
  9. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_adapters_ingest.py +552 -0
  10. graphrefly-0.3.0/tests/test_adapters_storage.py +430 -0
  11. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/components/GraphreflyHero.astro +78 -16
  12. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/components/Header.astro +7 -0
  13. graphrefly-0.3.0/website/src/components/MobileMenuFooter.astro +93 -0
  14. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/styles/custom.css +4 -4
  15. graphrefly-0.2.0/website/src/components/MobileMenuFooter.astro +0 -33
  16. {graphrefly-0.2.0 → graphrefly-0.3.0}/.claude/skills/dev-dispatch/SKILL.md +0 -0
  17. {graphrefly-0.2.0 → graphrefly-0.3.0}/.claude/skills/parity/SKILL.md +0 -0
  18. {graphrefly-0.2.0 → graphrefly-0.3.0}/.claude/skills/qa/SKILL.md +0 -0
  19. {graphrefly-0.2.0 → graphrefly-0.3.0}/.gemini/skills/dev-dispatch/SKILL.md +0 -0
  20. {graphrefly-0.2.0 → graphrefly-0.3.0}/.gemini/skills/parity/SKILL.md +0 -0
  21. {graphrefly-0.2.0 → graphrefly-0.3.0}/.github/workflows/pages.yml +0 -0
  22. {graphrefly-0.2.0 → graphrefly-0.3.0}/.github/workflows/release.yml +0 -0
  23. {graphrefly-0.2.0 → graphrefly-0.3.0}/.gitignore +0 -0
  24. {graphrefly-0.2.0 → graphrefly-0.3.0}/.mise.toml +0 -0
  25. {graphrefly-0.2.0 → graphrefly-0.3.0}/CLAUDE.md +0 -0
  26. {graphrefly-0.2.0 → graphrefly-0.3.0}/CONTRIBUTING.md +0 -0
  27. {graphrefly-0.2.0 → graphrefly-0.3.0}/GEMINI.md +0 -0
  28. {graphrefly-0.2.0 → graphrefly-0.3.0}/LICENSE +0 -0
  29. {graphrefly-0.2.0 → graphrefly-0.3.0}/archive/docs/DESIGN-ARCHIVE-INDEX.md +0 -0
  30. {graphrefly-0.2.0 → graphrefly-0.3.0}/archive/docs/SESSION-access-control-actor-guard.md +0 -0
  31. {graphrefly-0.2.0 → graphrefly-0.3.0}/archive/docs/SESSION-cross-repo-implementation-audit.md +0 -0
  32. {graphrefly-0.2.0 → graphrefly-0.3.0}/archive/docs/SESSION-demo-test-strategy.md +0 -0
  33. {graphrefly-0.2.0 → graphrefly-0.3.0}/archive/docs/SESSION-graphrefly-spec-design.md +0 -0
  34. {graphrefly-0.2.0 → graphrefly-0.3.0}/archive/docs/SESSION-serialization-memory-footprint.md +0 -0
  35. {graphrefly-0.2.0 → graphrefly-0.3.0}/archive/docs/SESSION-tier2-parity-nonlocal-forward-inner.md +0 -0
  36. {graphrefly-0.2.0 → graphrefly-0.3.0}/archive/docs/SESSION-universal-reduction-layer.md +0 -0
  37. {graphrefly-0.2.0 → graphrefly-0.3.0}/benchmarks/py-baseline.json +0 -0
  38. {graphrefly-0.2.0 → graphrefly-0.3.0}/docs/ADAPTER-CONTRACT.md +0 -0
  39. {graphrefly-0.2.0 → graphrefly-0.3.0}/docs/benchmark.md +0 -0
  40. {graphrefly-0.2.0 → graphrefly-0.3.0}/docs/docs-guidance.md +0 -0
  41. {graphrefly-0.2.0 → graphrefly-0.3.0}/docs/test-guidance.md +0 -0
  42. {graphrefly-0.2.0 → graphrefly-0.3.0}/examples/README.md +0 -0
  43. {graphrefly-0.2.0 → graphrefly-0.3.0}/examples/basic_counter.py +0 -0
  44. {graphrefly-0.2.0 → graphrefly-0.3.0}/llms.txt +0 -0
  45. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/__init__.py +0 -0
  46. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/compat/__init__.py +0 -0
  47. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/compat/async_utils.py +0 -0
  48. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/compat/asyncio_runner.py +0 -0
  49. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/compat/trio_runner.py +0 -0
  50. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/core/__init__.py +0 -0
  51. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/core/clock.py +0 -0
  52. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/core/dynamic_node.py +0 -0
  53. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/core/guard.py +0 -0
  54. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/core/meta.py +0 -0
  55. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/core/node.py +0 -0
  56. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/core/protocol.py +0 -0
  57. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/core/runner.py +0 -0
  58. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/core/subgraph_locks.py +0 -0
  59. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/core/sugar.py +0 -0
  60. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/core/versioning.py +0 -0
  61. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/extra/backoff.py +0 -0
  62. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/extra/backpressure.py +0 -0
  63. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/extra/checkpoint.py +0 -0
  64. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/extra/composite.py +0 -0
  65. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/extra/cron.py +0 -0
  66. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/extra/data_structures.py +0 -0
  67. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/extra/resilience.py +0 -0
  68. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/extra/sources.py +0 -0
  69. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/extra/tier1.py +0 -0
  70. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/extra/tier2.py +0 -0
  71. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/graph/__init__.py +0 -0
  72. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/graph/graph.py +0 -0
  73. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/integrations/__init__.py +0 -0
  74. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/integrations/fastapi.py +0 -0
  75. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/patterns/__init__.py +0 -0
  76. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/patterns/ai.py +0 -0
  77. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/patterns/cqrs.py +0 -0
  78. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/patterns/memory.py +0 -0
  79. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/patterns/messaging.py +0 -0
  80. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/patterns/orchestration.py +0 -0
  81. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/patterns/reactive_layout/__init__.py +0 -0
  82. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/patterns/reactive_layout/measurement_adapters.py +0 -0
  83. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/patterns/reactive_layout/reactive_block_layout.py +0 -0
  84. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/patterns/reactive_layout/reactive_layout.py +0 -0
  85. {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/py.typed +0 -0
  86. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/bench_core.py +0 -0
  87. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/conftest.py +0 -0
  88. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_adapter_contract.py +0 -0
  89. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_backpressure.py +0 -0
  90. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_concurrency.py +0 -0
  91. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_core.py +0 -0
  92. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_dynamic_node.py +0 -0
  93. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_edge_cases.py +0 -0
  94. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_extra_composite.py +0 -0
  95. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_extra_data_structures.py +0 -0
  96. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_extra_resilience.py +0 -0
  97. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_extra_sources.py +0 -0
  98. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_extra_sources_http.py +0 -0
  99. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_extra_tier1.py +0 -0
  100. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_extra_tier2.py +0 -0
  101. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_fastapi.py +0 -0
  102. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_graph.py +0 -0
  103. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_guard.py +0 -0
  104. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_measurement_adapters.py +0 -0
  105. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_patterns_ai.py +0 -0
  106. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_patterns_cqrs.py +0 -0
  107. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_patterns_memory.py +0 -0
  108. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_patterns_messaging.py +0 -0
  109. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_patterns_orchestration.py +0 -0
  110. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_perf_smoke.py +0 -0
  111. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_protocol.py +0 -0
  112. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_reactive_block_layout.py +0 -0
  113. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_reactive_layout.py +0 -0
  114. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_regressions.py +0 -0
  115. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_runner.py +0 -0
  116. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_smoke.py +0 -0
  117. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_sugar.py +0 -0
  118. {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_versioning.py +0 -0
  119. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/.gitignore +0 -0
  120. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/README.md +0 -0
  121. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/astro.config.mjs +0 -0
  122. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/content.config.ts +0 -0
  123. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/package.json +0 -0
  124. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/pnpm-lock.yaml +0 -0
  125. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/public/llms.txt +0 -0
  126. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/py-api-sidebar.mjs +0 -0
  127. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/scripts/gen_api_docs.py +0 -0
  128. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/scripts/sync-docs.mjs +0 -0
  129. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/components/PyodidePlayground.tsx +0 -0
  130. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/components/Sidebar.astro +0 -0
  131. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/components/SiteTitle.astro +0 -0
  132. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/BackoffPreset.md +0 -0
  133. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/BackoffStrategy.md +0 -0
  134. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/CheckpointAdapter.md +0 -0
  135. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/CircuitBreaker.md +0 -0
  136. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/CircuitOpenError.md +0 -0
  137. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/DeferWhen.md +0 -0
  138. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/DictCheckpointAdapter.md +0 -0
  139. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/DistillBundle.md +0 -0
  140. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/EmitStrategy.md +0 -0
  141. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/Extraction.md +0 -0
  142. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/FileCheckpointAdapter.md +0 -0
  143. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/HttpBundle.md +0 -0
  144. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/JitterMode.md +0 -0
  145. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/MemoryCheckpointAdapter.md +0 -0
  146. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/Message.md +0 -0
  147. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/MessageType.md +0 -0
  148. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/Messages.md +0 -0
  149. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/NodeActions.md +0 -0
  150. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/NodeFn.md +0 -0
  151. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/NodeImpl.md +0 -0
  152. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/NodeStatus.md +0 -0
  153. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/PipeOperator.md +0 -0
  154. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/PubSubHub.md +0 -0
  155. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/ReactiveIndexBundle.md +0 -0
  156. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/ReactiveListBundle.md +0 -0
  157. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/ReactiveLogBundle.md +0 -0
  158. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/ReactiveMapBundle.md +0 -0
  159. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/SqliteCheckpointAdapter.md +0 -0
  160. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/SubscribeHints.md +0 -0
  161. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/TokenBucket.md +0 -0
  162. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/VerifiableBundle.md +0 -0
  163. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/Versioned.md +0 -0
  164. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/WithBreakerBundle.md +0 -0
  165. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/WithStatusBundle.md +0 -0
  166. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/audit.md +0 -0
  167. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/batch.md +0 -0
  168. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/buffer.md +0 -0
  169. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/buffer_count.md +0 -0
  170. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/buffer_time.md +0 -0
  171. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/cached.md +0 -0
  172. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/checkpoint_node_value.md +0 -0
  173. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/circuit_breaker.md +0 -0
  174. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/combine.md +0 -0
  175. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/concat.md +0 -0
  176. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/concat_map.md +0 -0
  177. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/constant.md +0 -0
  178. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/debounce.md +0 -0
  179. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/decorrelated_jitter.md +0 -0
  180. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/delay.md +0 -0
  181. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/derived.md +0 -0
  182. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/dispatch_messages.md +0 -0
  183. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/distill.md +0 -0
  184. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/distinct_until_changed.md +0 -0
  185. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/effect.md +0 -0
  186. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/element_at.md +0 -0
  187. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/emit_with_batch.md +0 -0
  188. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/empty.md +0 -0
  189. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/exhaust_map.md +0 -0
  190. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/exponential.md +0 -0
  191. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/fibonacci.md +0 -0
  192. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/filter.md +0 -0
  193. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/find.md +0 -0
  194. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/first.md +0 -0
  195. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/first_value_from.md +0 -0
  196. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/flat_map.md +0 -0
  197. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/for_each.md +0 -0
  198. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/from_any.md +0 -0
  199. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/from_async_iter.md +0 -0
  200. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/from_awaitable.md +0 -0
  201. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/from_cron.md +0 -0
  202. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/from_event_emitter.md +0 -0
  203. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/from_fs_watch.md +0 -0
  204. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/from_git_hook.md +0 -0
  205. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/from_http.md +0 -0
  206. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/from_iter.md +0 -0
  207. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/from_mcp.md +0 -0
  208. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/from_timer.md +0 -0
  209. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/from_webhook.md +0 -0
  210. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/from_websocket.md +0 -0
  211. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/gate.md +0 -0
  212. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/index.md +0 -0
  213. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/interval.md +0 -0
  214. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/is_batching.md +0 -0
  215. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/is_phase2_message.md +0 -0
  216. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/is_terminal_message.md +0 -0
  217. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/last.md +0 -0
  218. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/linear.md +0 -0
  219. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/log_slice.md +0 -0
  220. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/map.md +0 -0
  221. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/merge.md +0 -0
  222. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/message_tier.md +0 -0
  223. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/never.md +0 -0
  224. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/node.md +0 -0
  225. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/of.md +0 -0
  226. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/operator.md +0 -0
  227. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/pairwise.md +0 -0
  228. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/partition_for_batch.md +0 -0
  229. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/pausable.md +0 -0
  230. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/pipe.md +0 -0
  231. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/producer.md +0 -0
  232. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/propagates_to_meta.md +0 -0
  233. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/pubsub.md +0 -0
  234. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/race.md +0 -0
  235. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/rate_limiter.md +0 -0
  236. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/reactive_index.md +0 -0
  237. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/reactive_list.md +0 -0
  238. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/reactive_log.md +0 -0
  239. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/reactive_map.md +0 -0
  240. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/reduce.md +0 -0
  241. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/repeat.md +0 -0
  242. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/replay.md +0 -0
  243. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/rescue.md +0 -0
  244. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/resolve_backoff_preset.md +0 -0
  245. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/restore_graph_checkpoint.md +0 -0
  246. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/retry.md +0 -0
  247. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/sample.md +0 -0
  248. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/save_graph_checkpoint.md +0 -0
  249. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/scan.md +0 -0
  250. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/share.md +0 -0
  251. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/skip.md +0 -0
  252. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/start_with.md +0 -0
  253. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/state.md +0 -0
  254. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/subscribe.md +0 -0
  255. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/switch_map.md +0 -0
  256. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/take.md +0 -0
  257. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/take_until.md +0 -0
  258. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/take_while.md +0 -0
  259. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/tap.md +0 -0
  260. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/throttle.md +0 -0
  261. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/throw_error.md +0 -0
  262. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/timeout.md +0 -0
  263. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/to_array.md +0 -0
  264. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/to_list.md +0 -0
  265. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/to_sse.md +0 -0
  266. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/to_websocket.md +0 -0
  267. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/token_bucket.md +0 -0
  268. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/token_tracker.md +0 -0
  269. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/verifiable.md +0 -0
  270. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/window.md +0 -0
  271. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/window_count.md +0 -0
  272. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/window_time.md +0 -0
  273. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/with_breaker.md +0 -0
  274. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/with_latest_from.md +0 -0
  275. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/with_max_attempts.md +0 -0
  276. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/with_status.md +0 -0
  277. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/zip.md +0 -0
  278. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/index.mdx +0 -0
  279. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/lab/python.mdx +0 -0
  280. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content.config.ts +0 -0
  281. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/env.d.ts +0 -0
  282. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/theme-prototypes.html +0 -0
  283. {graphrefly-0.2.0 → graphrefly-0.3.0}/website/tsconfig.json +0 -0
@@ -2,6 +2,22 @@
2
2
 
3
3
  <!-- version list -->
4
4
 
5
+ ## v0.3.0 (2026-04-04)
6
+
7
+ ### Chores
8
+
9
+ - Fix code pane
10
+ ([`a844d7f`](https://github.com/graphrefly/graphrefly-py/commit/a844d7f3e5d5a34169d67d668f0b9556888814e1))
11
+
12
+ - Update readme and fix site
13
+ ([`dbcd4d1`](https://github.com/graphrefly/graphrefly-py/commit/dbcd4d11f878b77a3f4ab95ae359d528b1b073af))
14
+
15
+ ### Features
16
+
17
+ - Fix website's contrast
18
+ ([`002ac99`](https://github.com/graphrefly/graphrefly-py/commit/002ac9988c9051bbbfc2c857a7259ff6f66e3def))
19
+
20
+
5
21
  ## v0.2.0 (2026-04-04)
6
22
 
7
23
  ### Features
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: graphrefly
3
- Version: 0.2.0
3
+ Version: 0.3.0
4
4
  Summary: Reactive graph protocol for human + LLM co-operation. Composable nodes, glitch-free diamond resolution, two-phase push, durable streaming. Zero dependencies.
5
5
  Project-URL: Homepage, https://py.graphrefly.dev
6
6
  Project-URL: Repository, https://github.com/graphrefly/graphrefly-py
@@ -29,9 +29,9 @@ Description-Content-Type: text/markdown
29
29
 
30
30
  One primitive. Zero dependencies. Composable nodes with glitch-free diamond resolution, two-phase push propagation, durable streaming, and async runners for asyncio and trio.
31
31
 
32
- [![PyPI](https://img.shields.io/pypi/v/graphrefly-py?color=blue)](https://pypi.org/project/graphrefly-py/)
32
+ [![PyPI](https://img.shields.io/pypi/v/graphrefly-py?color=blue)](https://pypi.org/project/graphrefly/)
33
33
  [![license](https://img.shields.io/github/license/graphrefly/graphrefly-py)](./LICENSE)
34
- [![Python](https://img.shields.io/pypi/pyversions/graphrefly-py)](https://pypi.org/project/graphrefly-py/)
34
+ [![Python](https://img.shields.io/pypi/pyversions/graphrefly-py)](https://pypi.org/project/graphrefly/)
35
35
 
36
36
  [Docs](https://py.graphrefly.dev) | [Spec](https://py.graphrefly.dev/spec/) | [TypeScript](https://graphrefly.dev) | [API Reference](https://py.graphrefly.dev/api/)
37
37
 
@@ -40,7 +40,7 @@ One primitive. Zero dependencies. Composable nodes with glitch-free diamond reso
40
40
  ## Quick start
41
41
 
42
42
  ```bash
43
- pip install graphrefly-py
43
+ pip install graphrefly
44
44
  ```
45
45
 
46
46
  ```python
@@ -4,9 +4,9 @@
4
4
 
5
5
  One primitive. Zero dependencies. Composable nodes with glitch-free diamond resolution, two-phase push propagation, durable streaming, and async runners for asyncio and trio.
6
6
 
7
- [![PyPI](https://img.shields.io/pypi/v/graphrefly-py?color=blue)](https://pypi.org/project/graphrefly-py/)
7
+ [![PyPI](https://img.shields.io/pypi/v/graphrefly-py?color=blue)](https://pypi.org/project/graphrefly/)
8
8
  [![license](https://img.shields.io/github/license/graphrefly/graphrefly-py)](./LICENSE)
9
- [![Python](https://img.shields.io/pypi/pyversions/graphrefly-py)](https://pypi.org/project/graphrefly-py/)
9
+ [![Python](https://img.shields.io/pypi/pyversions/graphrefly-py)](https://pypi.org/project/graphrefly/)
10
10
 
11
11
  [Docs](https://py.graphrefly.dev) | [Spec](https://py.graphrefly.dev/spec/) | [TypeScript](https://graphrefly.dev) | [API Reference](https://py.graphrefly.dev/api/)
12
12
 
@@ -15,7 +15,7 @@ One primitive. Zero dependencies. Composable nodes with glitch-free diamond reso
15
15
  ## Quick start
16
16
 
17
17
  ```bash
18
- pip install graphrefly-py
18
+ pip install graphrefly
19
19
  ```
20
20
 
21
21
  ```python
@@ -125,6 +125,8 @@ Union-find over node identity merges components when nodes list dependencies at
125
125
 
126
126
  **Keep this section in sync with `graphrefly-ts/docs/optimizations.md` § Cross-language implementation notes** so you can open both files side by side.
127
127
 
128
+ - **Storage & sink adapter pattern parity (Phase 5.2d, 2026-04-03):** All 5.2d sinks follow the same pattern in both TS and PY: duck-typed client protocols, `on_message` intercepting `DATA`, `SinkTransportError` for serialize/send failures. Buffered sinks (`to_clickhouse`, `to_s3`, `to_file`, `to_csv`) return a `BufferedSinkHandle` with `dispose()` + `flush()`. Per-record sinks (`to_postgres`, `to_mongo`, `to_loki`, `to_tempo`) return an unsubscribe callable. Checkpoint adapters (`checkpoint_to_s3`, `checkpoint_to_redis`) wire `graph.auto_checkpoint()`. PY uses `threading.Timer` for flush timers; TS uses `setTimeout`. PY `to_postgres` calls `client.execute(sql, params)` (psycopg2/3 style); TS calls `client.query(sql, params)` (pg style). PY `json.dumps` includes spaces after separators; TS `JSON.stringify` does not — NDJSON output is semantically equivalent but not byte-identical across languages.
129
+
128
130
  ### 1. Message type wire encoding
129
131
 
130
132
  | | |
@@ -319,6 +321,12 @@ Applies to `src/extra/adapters.ts` and `graphrefly.extra.adapters`. **Keep the t
319
321
  | **`fromPrometheus` / `fromClickHouseWatch` `signal` option** | `signal: AbortSignal` for external cancellation | No equivalent; uses `active[0]` flag on teardown | PY has no standard `AbortSignal`. External cancellation in PY is handled by unsubscribing (which triggers the cleanup/stop function). Both ports stop cleanly on teardown. |
320
322
  | **`SyslogMessage` field naming** | camelCase: `appName`, `procId`, `msgId` | snake_case: `app_name`, `proc_id`, `msg_id` | Language convention applied to output data structures. Each port follows its ecosystem's naming idiom. |
321
323
  | **`fromCSV` / `fromNDJSON` source type** | `AsyncIterable<string>` (async streams with chunk buffering) | `Iterable[str]` (sync iterators via threads) | PY uses threads for I/O concurrency; sync iterables are natural for `csv.reader` integration. TS uses async iteration for streaming I/O. |
324
+ | **`PulsarConsumerLike` protocol** | `pulsar-client` JS shape: `receive()` returns Promise, `acknowledge(msg)` returns Promise, getter methods (`getData()`, `getTopicName()`, etc.) | `pulsar-client` PY shape: `receive()` blocking, `acknowledge(msg)` sync, attribute methods (`data()`, `topic_name()`, etc.) | Each port matches the native Pulsar client API for its ecosystem. TS uses async loop; PY uses threaded blocking loop. |
325
+ | **`PulsarProducerLike.send()` call shape** | Single object: `send({data, partitionKey, properties})` | Positional + kwargs: `send(data, partition_key=..., properties=...)` | Matches respective native Pulsar client SDK calling conventions. |
326
+ | **`PulsarMessage` field naming** | camelCase: `messageId`, `publishTime`, `eventTime` | snake_case: `message_id`, `publish_time`, `event_time` | Language convention applied to output data structures. |
327
+ | **`NATSClientLike` protocol** | nats.js shape: `subscribe()` returns `AsyncIterable`, `publish(subject, data)` | Dual: sync iterable (threaded drain) or async iterable/coroutine (via `Runner`). Auto-detected at subscribe time. Optional `runner` kwarg. | TS uses native async iteration. PY auto-detects sync vs async subscriptions: sync uses threaded drain, async uses `resolve_runner().schedule()`. Both support queue groups. |
328
+ | **`RabbitMQChannelLike` protocol** | amqplib shape: `consume(queue, callback)` returns `Promise<{consumerTag}>`, `cancel(tag)`, `ack(msg)`, `publish(exchange, routingKey, content)` | pika shape: `basic_consume(queue, on_message_callback, auto_ack)`, `start_consuming()`, `basic_ack(delivery_tag)`, `basic_publish(exchange, routing_key, body)` | Each port matches its ecosystem's dominant AMQP library. Pika requires `start_consuming()` to enter the event loop; amqplib's consume is promise-based. |
329
+ | **`RabbitMQMessage` field naming** | camelCase: `routingKey`, `deliveryTag` | snake_case: `routing_key`, `delivery_tag` | Language convention applied to output data structures. |
322
330
 
323
331
  ---
324
332
 
@@ -324,9 +324,9 @@ Connectors for the universal reduction layer (Phase 8). Each wraps an external p
324
324
  - [x] `from_redis_stream(client, key, opts)` / `to_redis_stream(source, client, key, opts)` — Redis Streams (duck-typed `RedisClientLike`).
325
325
  - [x] `from_csv(source, opts)` / `from_ndjson(source)` — `Iterable[str]` ingest for batch replay; threaded drain.
326
326
  - [x] `from_clickhouse_watch(client, query, opts)` — timer-driven query polling as reactive source.
327
- - [ ] `from_pulsar(consumer, topic, opts)` / `to_pulsar(source, producer, topic, opts)` — Apache Pulsar native client
328
- - [ ] `from_nats(consumer, subject, opts)` / `to_nats(source, client, subject, opts)` — NATS consumer/producer
329
- - [ ] `from_rabbitmq(channel, queue, opts)` / `to_rabbitmq(source, channel, exchange, opts)` — RabbitMQ consumer/producer
327
+ - [x] `from_pulsar(consumer, opts)` / `to_pulsar(source, producer, opts)` — Apache Pulsar native client
328
+ - [x] `from_nats(client, subject, opts)` / `to_nats(source, client, subject, opts)` — NATS consumer/producer
329
+ - [x] `from_rabbitmq(channel, queue, opts)` / `to_rabbitmq(source, channel, exchange, opts)` — RabbitMQ consumer/producer
330
330
 
331
331
  ### 5.3c — Storage & sink adapters
332
332
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "graphrefly"
3
- version = "0.2.0"
3
+ version = "0.3.0"
4
4
  description = "Reactive graph protocol for human + LLM co-operation. Composable nodes, glitch-free diamond resolution, two-phase push, durable streaming. Zero dependencies."
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -11,9 +11,12 @@ from graphrefly.extra.adapters import (
11
11
  from_http,
12
12
  from_kafka,
13
13
  from_mcp,
14
+ from_nats,
14
15
  from_ndjson,
15
16
  from_otel,
16
17
  from_prometheus,
18
+ from_pulsar,
19
+ from_rabbitmq,
17
20
  from_redis_stream,
18
21
  from_statsd,
19
22
  from_syslog,
@@ -24,6 +27,9 @@ from graphrefly.extra.adapters import (
24
27
  parse_syslog,
25
28
  sse_frame,
26
29
  to_kafka,
30
+ to_nats,
31
+ to_pulsar,
32
+ to_rabbitmq,
27
33
  to_redis_stream,
28
34
  to_sse,
29
35
  to_websocket,
@@ -213,9 +219,12 @@ __all__ = [
213
219
  "from_http",
214
220
  "from_kafka",
215
221
  "from_mcp",
222
+ "from_nats",
216
223
  "from_ndjson",
217
224
  "from_otel",
218
225
  "from_prometheus",
226
+ "from_pulsar",
227
+ "from_rabbitmq",
219
228
  "from_redis_stream",
220
229
  "from_statsd",
221
230
  "from_syslog",
@@ -234,6 +243,9 @@ __all__ = [
234
243
  "throw_error",
235
244
  "to_array",
236
245
  "to_kafka",
246
+ "to_nats",
247
+ "to_pulsar",
248
+ "to_rabbitmq",
237
249
  "to_redis_stream",
238
250
  "sse_frame",
239
251
  "to_websocket",