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.
- {graphrefly-0.2.0 → graphrefly-0.3.0}/CHANGELOG.md +16 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/PKG-INFO +4 -4
- {graphrefly-0.2.0 → graphrefly-0.3.0}/README.md +3 -3
- {graphrefly-0.2.0 → graphrefly-0.3.0}/docs/optimizations.md +8 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/docs/roadmap.md +3 -3
- {graphrefly-0.2.0 → graphrefly-0.3.0}/pyproject.toml +1 -1
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/extra/__init__.py +12 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/extra/adapters.py +1344 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_adapters_ingest.py +552 -0
- graphrefly-0.3.0/tests/test_adapters_storage.py +430 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/components/GraphreflyHero.astro +78 -16
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/components/Header.astro +7 -0
- graphrefly-0.3.0/website/src/components/MobileMenuFooter.astro +93 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/styles/custom.css +4 -4
- graphrefly-0.2.0/website/src/components/MobileMenuFooter.astro +0 -33
- {graphrefly-0.2.0 → graphrefly-0.3.0}/.claude/skills/dev-dispatch/SKILL.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/.claude/skills/parity/SKILL.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/.claude/skills/qa/SKILL.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/.gemini/skills/dev-dispatch/SKILL.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/.gemini/skills/parity/SKILL.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/.github/workflows/pages.yml +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/.github/workflows/release.yml +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/.gitignore +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/.mise.toml +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/CLAUDE.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/CONTRIBUTING.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/GEMINI.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/LICENSE +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/archive/docs/DESIGN-ARCHIVE-INDEX.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/archive/docs/SESSION-access-control-actor-guard.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/archive/docs/SESSION-cross-repo-implementation-audit.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/archive/docs/SESSION-demo-test-strategy.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/archive/docs/SESSION-graphrefly-spec-design.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/archive/docs/SESSION-serialization-memory-footprint.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/archive/docs/SESSION-tier2-parity-nonlocal-forward-inner.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/archive/docs/SESSION-universal-reduction-layer.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/benchmarks/py-baseline.json +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/docs/ADAPTER-CONTRACT.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/docs/benchmark.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/docs/docs-guidance.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/docs/test-guidance.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/examples/README.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/examples/basic_counter.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/llms.txt +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/__init__.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/compat/__init__.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/compat/async_utils.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/compat/asyncio_runner.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/compat/trio_runner.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/core/__init__.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/core/clock.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/core/dynamic_node.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/core/guard.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/core/meta.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/core/node.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/core/protocol.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/core/runner.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/core/subgraph_locks.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/core/sugar.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/core/versioning.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/extra/backoff.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/extra/backpressure.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/extra/checkpoint.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/extra/composite.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/extra/cron.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/extra/data_structures.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/extra/resilience.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/extra/sources.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/extra/tier1.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/extra/tier2.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/graph/__init__.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/graph/graph.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/integrations/__init__.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/integrations/fastapi.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/patterns/__init__.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/patterns/ai.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/patterns/cqrs.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/patterns/memory.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/patterns/messaging.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/patterns/orchestration.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/patterns/reactive_layout/__init__.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/patterns/reactive_layout/measurement_adapters.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/patterns/reactive_layout/reactive_block_layout.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/patterns/reactive_layout/reactive_layout.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/src/graphrefly/py.typed +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/bench_core.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/conftest.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_adapter_contract.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_backpressure.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_concurrency.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_core.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_dynamic_node.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_edge_cases.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_extra_composite.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_extra_data_structures.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_extra_resilience.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_extra_sources.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_extra_sources_http.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_extra_tier1.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_extra_tier2.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_fastapi.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_graph.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_guard.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_measurement_adapters.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_patterns_ai.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_patterns_cqrs.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_patterns_memory.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_patterns_messaging.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_patterns_orchestration.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_perf_smoke.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_protocol.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_reactive_block_layout.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_reactive_layout.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_regressions.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_runner.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_smoke.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_sugar.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/tests/test_versioning.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/.gitignore +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/README.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/astro.config.mjs +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/content.config.ts +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/package.json +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/pnpm-lock.yaml +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/public/llms.txt +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/py-api-sidebar.mjs +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/scripts/gen_api_docs.py +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/scripts/sync-docs.mjs +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/components/PyodidePlayground.tsx +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/components/Sidebar.astro +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/components/SiteTitle.astro +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/BackoffPreset.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/BackoffStrategy.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/CheckpointAdapter.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/CircuitBreaker.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/CircuitOpenError.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/DeferWhen.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/DictCheckpointAdapter.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/DistillBundle.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/EmitStrategy.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/Extraction.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/FileCheckpointAdapter.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/HttpBundle.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/JitterMode.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/MemoryCheckpointAdapter.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/Message.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/MessageType.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/Messages.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/NodeActions.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/NodeFn.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/NodeImpl.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/NodeStatus.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/PipeOperator.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/PubSubHub.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/ReactiveIndexBundle.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/ReactiveListBundle.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/ReactiveLogBundle.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/ReactiveMapBundle.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/SqliteCheckpointAdapter.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/SubscribeHints.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/TokenBucket.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/VerifiableBundle.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/Versioned.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/WithBreakerBundle.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/WithStatusBundle.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/audit.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/batch.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/buffer.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/buffer_count.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/buffer_time.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/cached.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/checkpoint_node_value.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/circuit_breaker.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/combine.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/concat.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/concat_map.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/constant.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/debounce.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/decorrelated_jitter.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/delay.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/derived.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/dispatch_messages.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/distill.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/distinct_until_changed.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/effect.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/element_at.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/emit_with_batch.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/empty.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/exhaust_map.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/exponential.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/fibonacci.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/filter.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/find.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/first.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/first_value_from.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/flat_map.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/for_each.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/from_any.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/from_async_iter.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/from_awaitable.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/from_cron.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/from_event_emitter.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/from_fs_watch.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/from_git_hook.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/from_http.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/from_iter.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/from_mcp.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/from_timer.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/from_webhook.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/from_websocket.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/gate.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/index.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/interval.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/is_batching.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/is_phase2_message.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/is_terminal_message.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/last.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/linear.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/log_slice.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/map.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/merge.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/message_tier.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/never.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/node.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/of.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/operator.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/pairwise.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/partition_for_batch.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/pausable.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/pipe.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/producer.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/propagates_to_meta.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/pubsub.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/race.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/rate_limiter.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/reactive_index.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/reactive_list.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/reactive_log.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/reactive_map.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/reduce.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/repeat.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/replay.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/rescue.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/resolve_backoff_preset.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/restore_graph_checkpoint.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/retry.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/sample.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/save_graph_checkpoint.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/scan.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/share.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/skip.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/start_with.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/state.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/subscribe.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/switch_map.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/take.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/take_until.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/take_while.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/tap.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/throttle.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/throw_error.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/timeout.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/to_array.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/to_list.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/to_sse.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/to_websocket.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/token_bucket.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/token_tracker.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/verifiable.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/window.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/window_count.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/window_time.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/with_breaker.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/with_latest_from.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/with_max_attempts.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/with_status.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/api/zip.md +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/index.mdx +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content/docs/lab/python.mdx +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/content.config.ts +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/src/env.d.ts +0 -0
- {graphrefly-0.2.0 → graphrefly-0.3.0}/website/theme-prototypes.html +0 -0
- {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.
|
|
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
|
-
[](https://pypi.org/project/graphrefly
|
|
32
|
+
[](https://pypi.org/project/graphrefly/)
|
|
33
33
|
[](./LICENSE)
|
|
34
|
-
[](https://pypi.org/project/graphrefly
|
|
34
|
+
[](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
|
|
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
|
-
[](https://pypi.org/project/graphrefly
|
|
7
|
+
[](https://pypi.org/project/graphrefly/)
|
|
8
8
|
[](./LICENSE)
|
|
9
|
-
[](https://pypi.org/project/graphrefly
|
|
9
|
+
[](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
|
|
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
|
-
- [
|
|
328
|
-
- [
|
|
329
|
-
- [
|
|
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.
|
|
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",
|