agent-observability-trace-cli 0.1.2__tar.gz → 0.1.3__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 (212) hide show
  1. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/PKG-INFO +47 -6
  2. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/README.md +46 -5
  3. agent_observability_trace_cli-0.1.3/docs/demo.gif +0 -0
  4. agent_observability_trace_cli-0.1.3/docs/usage.gif +0 -0
  5. agent_observability_trace_cli-0.1.3/npm/LICENSE +198 -0
  6. agent_observability_trace_cli-0.1.3/npm/README.md +135 -0
  7. agent_observability_trace_cli-0.1.3/npm/bin/agent-trace.js +63 -0
  8. agent_observability_trace_cli-0.1.3/npm/package.json +39 -0
  9. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/pyproject.toml +1 -1
  10. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/.github/CODEOWNERS +0 -0
  11. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  12. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  13. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/.github/dependabot.yml +0 -0
  14. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/.github/pull_request_template.md +0 -0
  15. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/.github/workflows/benchmark.yml +0 -0
  16. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/.github/workflows/ci.yml +0 -0
  17. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/.github/workflows/publish-pypi.yml +0 -0
  18. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/.github/workflows/release.yml +0 -0
  19. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/.github/workflows/scorecard.yml +0 -0
  20. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/.gitignore +0 -0
  21. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/.pre-commit-config.yaml +0 -0
  22. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/CHANGELOG.md +0 -0
  23. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/CONTRIBUTING.md +0 -0
  24. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/LICENSE +0 -0
  25. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/SECURITY.md +0 -0
  26. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/benchmarks/README.md +0 -0
  27. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/benchmarks/__init__.py +0 -0
  28. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/benchmarks/results/baseline.json +0 -0
  29. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/benchmarks/test_fidelity.py +0 -0
  30. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/benchmarks/test_ingestion.py +0 -0
  31. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/benchmarks/test_overhead.py +0 -0
  32. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/benchmarks/test_replay_vs_live.py +0 -0
  33. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/demos/record_replay_demo.py +0 -0
  34. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/docker/grafana/datasources/tempo.yaml +0 -0
  35. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/docker/tempo.yaml +0 -0
  36. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/docker-compose.yml +0 -0
  37. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/docs/assets/dev-to-demos/demo-1-record-replay.gif +0 -0
  38. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/docs/assets/dev-to-demos/demo-2-inspect.gif +0 -0
  39. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/docs/assets/dev-to-demos/demo-3-agent-native-json.gif +0 -0
  40. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/docs/concepts.md +0 -0
  41. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/docs/getting-started.md +0 -0
  42. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/docs/integrations/langgraph.md +0 -0
  43. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/docs/integrations/openai-agents.md +0 -0
  44. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/01-basic-trace/README.md +0 -0
  45. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/01-basic-trace/example.py +0 -0
  46. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/02-langgraph-failure-replay/README.md +0 -0
  47. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/02-langgraph-failure-replay/example.py +0 -0
  48. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/03-ci-pipeline/README.md +0 -0
  49. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/03-ci-pipeline/example.py +0 -0
  50. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/03-ci-pipeline/test_with_fixture.py +0 -0
  51. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/04-agno-agent-team/README.md +0 -0
  52. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/04-agno-agent-team/example.py +0 -0
  53. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/04-autogen-agent-observability/README.md +0 -0
  54. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/04-autogen-agent-observability/example.py +0 -0
  55. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/04-bedrock-record-replay/README.md +0 -0
  56. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/04-bedrock-record-replay/example.py +0 -0
  57. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/04-crewai-research-crew/README.md +0 -0
  58. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/04-crewai-research-crew/example.py +0 -0
  59. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/04-google-genai-thinking-config/README.md +0 -0
  60. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/04-google-genai-thinking-config/example.py +0 -0
  61. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/04-grpc-record-replay/README.md +0 -0
  62. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/04-grpc-record-replay/echo.proto +0 -0
  63. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/04-grpc-record-replay/echo_pb2.py +0 -0
  64. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/04-grpc-record-replay/echo_pb2_grpc.py +0 -0
  65. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/04-grpc-record-replay/example.py +0 -0
  66. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/04-haystack-pipeline/README.md +0 -0
  67. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/04-haystack-pipeline/example.py +0 -0
  68. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/04-llama-index-agent-trace/README.md +0 -0
  69. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/04-llama-index-agent-trace/example.py +0 -0
  70. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/04-mcp-stdio-capture/README.md +0 -0
  71. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/04-mcp-stdio-capture/example.py +0 -0
  72. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/04-mcp-stdio-capture/mcp_server.py +0 -0
  73. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/04-openai-agents-basic/README.md +0 -0
  74. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/04-openai-agents-basic/example.py +0 -0
  75. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/04-pydantic-ai-retry-diagnosis/README.md +0 -0
  76. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/04-pydantic-ai-retry-diagnosis/example.py +0 -0
  77. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/04-realtime-websocket-interceptor/README.md +0 -0
  78. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/04-realtime-websocket-interceptor/example.py +0 -0
  79. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/05-parallel-command-parent-routing/README.md +0 -0
  80. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/05-parallel-command-parent-routing/example.py +0 -0
  81. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/06-langgraph-handoff-parallel-tools/README.md +0 -0
  82. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/06-langgraph-handoff-parallel-tools/example.py +0 -0
  83. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/07-langgraph-invoke-vs-stream-timing/README.md +0 -0
  84. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/07-langgraph-invoke-vs-stream-timing/example.py +0 -0
  85. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/08-langgraph-react-agent-tool-arg-injection/README.md +0 -0
  86. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/08-langgraph-react-agent-tool-arg-injection/example.py +0 -0
  87. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/09-langgraph-dev-cli/README.md +0 -0
  88. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/09-langgraph-dev-cli/graph.py +0 -0
  89. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/09-langgraph-dev-cli/langgraph.json +0 -0
  90. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/09-langgraph-dev-cli/simulate_dev_server.py +0 -0
  91. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/10-langgraph-checkpointer-interrupt-resume/README.md +0 -0
  92. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/10-langgraph-checkpointer-interrupt-resume/example.py +0 -0
  93. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/11-langgraph-react-agent-non-openai-finish-reason/README.md +0 -0
  94. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/11-langgraph-react-agent-non-openai-finish-reason/example.py +0 -0
  95. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/12-langgraph-structured-response-tool-conflict/README.md +0 -0
  96. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/12-langgraph-structured-response-tool-conflict/example.py +0 -0
  97. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/13-langgraph-streaming-token-usage/README.md +0 -0
  98. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/13-langgraph-streaming-token-usage/example.py +0 -0
  99. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/14-openai-responses-api-tool-call/README.md +0 -0
  100. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/14-openai-responses-api-tool-call/example.py +0 -0
  101. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/15-langgraph-tool-execution-error/README.md +0 -0
  102. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/15-langgraph-tool-execution-error/example.py +0 -0
  103. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/16-openai-sdk-plain-embeddings/README.md +0 -0
  104. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/16-openai-sdk-plain-embeddings/example.py +0 -0
  105. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/17-langgraph-toolnode-custom-provider/README.md +0 -0
  106. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/17-langgraph-toolnode-custom-provider/example.py +0 -0
  107. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/18-langgraph-anthropic-empty-content/README.md +0 -0
  108. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/examples/18-langgraph-anthropic-empty-content/example.py +0 -0
  109. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/__init__.py +0 -0
  110. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/_cli.py +0 -0
  111. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/_inspect.py +0 -0
  112. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/_replay/__init__.py +0 -0
  113. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/_replay/engine.py +0 -0
  114. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/_replay/fixture.py +0 -0
  115. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/core/__init__.py +0 -0
  116. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/core/clock.py +0 -0
  117. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/core/exceptions.py +0 -0
  118. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/core/span.py +0 -0
  119. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/core/trace.py +0 -0
  120. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/exporters/__init__.py +0 -0
  121. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/exporters/file.py +0 -0
  122. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/exporters/otlp.py +0 -0
  123. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/exporters/remote_fixture.py +0 -0
  124. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/exporters/stdout.py +0 -0
  125. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/integrations/__init__.py +0 -0
  126. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/integrations/agno.py +0 -0
  127. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/integrations/autogen.py +0 -0
  128. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/integrations/crewai.py +0 -0
  129. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/integrations/google_genai.py +0 -0
  130. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/integrations/haystack.py +0 -0
  131. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/integrations/langchain_core.py +0 -0
  132. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/integrations/langgraph.py +0 -0
  133. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/integrations/langgraph_checkpoint.py +0 -0
  134. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/integrations/langgraph_state_diff.py +0 -0
  135. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/integrations/langgraph_stream_debug.py +0 -0
  136. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/integrations/llama_index.py +0 -0
  137. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/integrations/mcp.py +0 -0
  138. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/integrations/openai_agents.py +0 -0
  139. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/integrations/pydantic_ai.py +0 -0
  140. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/integrations/streaming.py +0 -0
  141. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/interceptor/__init__.py +0 -0
  142. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/interceptor/aiohttp_hook.py +0 -0
  143. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/interceptor/botocore_hook.py +0 -0
  144. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/interceptor/grpc_hook.py +0 -0
  145. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/interceptor/httpx_hook.py +0 -0
  146. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/interceptor/logging_hook.py +0 -0
  147. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/interceptor/requests_patch.py +0 -0
  148. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/interceptor/sse.py +0 -0
  149. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/interceptor/stdio_hook.py +0 -0
  150. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/interceptor/warnings_hook.py +0 -0
  151. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/interceptor/websocket_hook.py +0 -0
  152. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/plugins/__init__.py +0 -0
  153. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/plugins/base.py +0 -0
  154. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/src/agent_trace/py.typed +0 -0
  155. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/__init__.py +0 -0
  156. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/conftest.py +0 -0
  157. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/integration/__init__.py +0 -0
  158. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/integration/_mcp_stdio_server.py +0 -0
  159. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/integration/test_agno.py +0 -0
  160. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/integration/test_autogen.py +0 -0
  161. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/integration/test_crewai.py +0 -0
  162. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/integration/test_google_genai.py +0 -0
  163. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/integration/test_groq_integration.py +0 -0
  164. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/integration/test_haystack.py +0 -0
  165. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/integration/test_langchain_core.py +0 -0
  166. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/integration/test_langgraph.py +0 -0
  167. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/integration/test_langgraph_checkpoint.py +0 -0
  168. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/integration/test_langgraph_state_diff.py +0 -0
  169. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/integration/test_langgraph_stream_debug.py +0 -0
  170. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/integration/test_llama_index.py +0 -0
  171. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/integration/test_mcp.py +0 -0
  172. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/integration/test_openai_agents.py +0 -0
  173. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/integration/test_pydantic_ai.py +0 -0
  174. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/__init__.py +0 -0
  175. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/grpc_fixtures/echo.proto +0 -0
  176. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/grpc_fixtures/echo_pb2.py +0 -0
  177. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/grpc_fixtures/echo_pb2_grpc.py +0 -0
  178. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_aiohttp_hook.py +0 -0
  179. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_botocore_hook.py +0 -0
  180. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_cli.py +0 -0
  181. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_clock.py +0 -0
  182. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_exporters.py +0 -0
  183. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_fixture.py +0 -0
  184. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_grpc_hook.py +0 -0
  185. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_httpx_hook.py +0 -0
  186. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_inspect.py +0 -0
  187. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_integrations_agno.py +0 -0
  188. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_integrations_autogen.py +0 -0
  189. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_integrations_crewai.py +0 -0
  190. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_integrations_google_genai.py +0 -0
  191. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_integrations_haystack.py +0 -0
  192. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_integrations_langchain_core.py +0 -0
  193. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_integrations_langgraph.py +0 -0
  194. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_integrations_llama_index.py +0 -0
  195. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_integrations_mcp.py +0 -0
  196. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_integrations_openai_agents.py +0 -0
  197. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_langgraph_state_diff.py +0 -0
  198. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_langgraph_stream_debug.py +0 -0
  199. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_logging_hook.py +0 -0
  200. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_plugins.py +0 -0
  201. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_remote_fixture.py +0 -0
  202. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_replay_engine.py +0 -0
  203. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_requests_patch.py +0 -0
  204. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_span.py +0 -0
  205. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_sse.py +0 -0
  206. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_stdio_hook.py +0 -0
  207. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_streaming.py +0 -0
  208. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_trace.py +0 -0
  209. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_tracer.py +0 -0
  210. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_warnings_hook.py +0 -0
  211. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/tests/unit/test_websocket_hook.py +0 -0
  212. {agent_observability_trace_cli-0.1.2 → agent_observability_trace_cli-0.1.3}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-observability-trace-cli
3
- Version: 0.1.2
3
+ Version: 0.1.3
4
4
  Summary: AI agent observability with deterministic record/replay — capture any LangGraph or OpenAI Agents SDK run, replay it offline at zero API cost.
5
5
  Project-URL: Homepage, https://github.com/RudrenduPaul/agent-observability
6
6
  Project-URL: Documentation, https://github.com/RudrenduPaul/agent-observability/blob/main/docs/getting-started.md
@@ -95,7 +95,7 @@ Description-Content-Type: text/markdown
95
95
 
96
96
  ![Terminal recording of agent-trace recording a live HTTP call, then replaying the same run offline with zero network requests](docs/assets/dev-to-demos/demo-1-record-replay.gif)
97
97
 
98
- [![PyPI](https://img.shields.io/pypi/v/agent-observability-trace)](https://pypi.org/project/agent-observability-trace/)
98
+ [![PyPI](https://img.shields.io/pypi/v/agent-observability-trace-cli)](https://pypi.org/project/agent-observability-trace-cli/)
99
99
  [![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE)
100
100
  [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
101
101
  [![CI](https://github.com/RudrenduPaul/agent-observability/actions/workflows/ci.yml/badge.svg)](https://github.com/RudrenduPaul/agent-observability/actions)
@@ -106,23 +106,25 @@ Description-Content-Type: text/markdown
106
106
  ## Install
107
107
 
108
108
  ```bash
109
- pip install agent-observability-trace
109
+ pip install agent-observability-trace-cli
110
110
  # or
111
- uv add agent-observability-trace
111
+ uv add agent-observability-trace-cli
112
112
  ```
113
113
 
114
114
  LangGraph support:
115
115
 
116
116
  ```bash
117
- pip install agent-observability-trace[langgraph]
117
+ pip install agent-observability-trace-cli[langgraph]
118
118
  ```
119
119
 
120
120
  OpenAI Agents SDK support:
121
121
 
122
122
  ```bash
123
- pip install agent-observability-trace[openai-agents]
123
+ pip install agent-observability-trace-cli[openai-agents]
124
124
  ```
125
125
 
126
+ ![Terminal recording of installing agent-observability-trace-cli into a fresh virtual environment, then running agent-trace version and recording a first HTTP call with agent-trace list showing the resulting run](docs/demo.gif)
127
+
126
128
  ## The problem
127
129
 
128
130
  A LangGraph run fails after step 8. Your trace in LangSmith or Langfuse shows *what* broke. But to reproduce it you have to re-run the entire agent: 8 more LLM calls, 30 more seconds, another $0.15 in API cost. If the failure was caused by a specific tool response or a transient model output, you can't reproduce it at all. You're debugging against a moving target.
@@ -169,6 +171,8 @@ with replay("run_<id>") as ctx:
169
171
 
170
172
  > **Sync and async clients:** Agent Observability intercepts `httpx.Client`, `httpx.AsyncClient`, and `requests.Session` — including the async client used by default in the OpenAI Python SDK v1.x and Anthropic SDK. The patch is installed at request-dispatch time, so it also covers clients constructed before recording/replay starts (e.g. a module-level `openai.AsyncOpenAI()` instance).
171
173
 
174
+ ![Terminal recording of replaying a previously recorded run with zero network calls, then running agent-trace show to print the replayed span tree](docs/usage.gif)
175
+
172
176
  ---
173
177
 
174
178
  ## Use in CI: replay at zero cost
@@ -321,6 +325,42 @@ after:
321
325
 
322
326
  ---
323
327
 
328
+ ## FAQ
329
+
330
+ **What is Agent Observability, and how is it different from a typical LLM tracing tool?**
331
+
332
+ It's a Python library and CLI (`agent-trace`) that records every HTTP request and response your agent makes, verbatim, to a local SQLite fixture, then replays those exact bytes later with no network call. Most tracing tools, including LangSmith, Langfuse, Helicone, and OpenLLMetry, show you what happened during a run. Agent Observability additionally lets you reproduce that exact run offline, deterministically, without touching the live API. See "How Agent Observability compares" above for the full capability breakdown against those four tools.
333
+
334
+ **How does deterministic record/replay actually work?**
335
+
336
+ Recording patches `httpx.Client`, `httpx.AsyncClient`, and `requests.Session` at the transport layer (`src/agent_trace/interceptor/`) to capture every outbound request and response as raw bytes into `fixture.db`. Replay installs a `FixtureClock` (`src/agent_trace/core/clock.py`) and serves those same bytes back in the original sequence, so the code path, span tree, and timestamps all match the original recording. The benchmark numbers quoted above (0.011% recording overhead, 0.93ms mean replay latency, 100% fidelity) come from `benchmarks/test_overhead.py`, `benchmarks/test_replay_vs_live.py`, and `benchmarks/test_fidelity.py` in this repo, runnable yourself with `uv run pytest benchmarks/`.
337
+
338
+ **How do I install it, and what platforms does it support?**
339
+
340
+ `pip install agent-observability-trace-cli`, or `uv add agent-observability-trace-cli`. It requires Python 3.10 or newer and depends only on `httpx` and `rich`, no compiled extensions, so it installs anywhere those wheels do. CI (`.github/workflows/ci.yml`) currently runs on Ubuntu only; macOS and Windows aren't part of the automated test matrix, though nothing in the interceptor or replay engine touches OS-specific APIs. An npm wrapper, [`agent-observability-trace-cli`](npm/) (source under [`npm/`](npm/) in this repo), is also published for teams that reach for `npx`/`npm`, but it still shells out to the Python CLI under the hood, so the Python package must be installed too.
341
+
342
+ **How does this compare to LangSmith specifically?**
343
+
344
+ LangSmith's `LANGSMITH_TEST_CACHE` (VCR-style cassettes, via `langsmith[vcr]`) is the closest built-in equivalent. It's Python plus LangChain only, captures HTTP calls to `api.openai.com` rather than any HTTP client, doesn't record full wire-level bytes, and requires a LangSmith account. Agent Observability works with any Python HTTP client, plus dedicated interceptors for gRPC, aiohttp, botocore, and WebSocket traffic, records full request and response bytes locally, and needs no account or hosted service. Pick LangSmith if you're already on LangChain and want dataset management, prompt versioning, and human feedback loops alongside tracing. Pick Agent Observability if the goal is reproducing one specific failed run at zero API cost, regardless of which SDK made the call.
345
+
346
+ **What happens if replay can't find a matching fixture entry?**
347
+
348
+ With `AGENT_TRACE_NETWORK_GUARD=1` set, any request missing from the fixture raises `NetworkGuardError` immediately instead of silently falling through to a live call. The most common cause is an HTTP client constructed before the recording or replay context was entered, since the patch only applies to clients created inside the `start_trace`/`replay` block. See "Known limitations" above for the full list of edges, including partial gRPC streaming coverage and pre-HTTP exceptions that never reach the interceptor.
349
+
350
+ **Does it capture agents built on non-Python frameworks?**
351
+
352
+ No. Capture is a Python HTTP-transport interceptor plus instrumented callbacks for the integrations under `src/agent_trace/integrations/` (LangGraph, CrewAI, AutoGen, LlamaIndex, Haystack, Agno, PydanticAI, Google GenAI, and others). It only sees traffic from your own Python process. Agents built in other languages, or calls made by a third-party hosted service you don't run yourself, are outside its capture surface.
353
+
354
+ **Are fixture files safe to commit to version control?**
355
+
356
+ Not by default. `fixture.db` contains full HTTP request and response bodies, which means API keys and prompt contents whenever they appear in headers or payloads. Add `.agent-trace/` and `*.db` to `.gitignore`, and never commit a fixture recorded against a production API key. Strip or redact secrets first if you want to keep a fixture as a committed CI test asset.
357
+
358
+ **Is this free to use commercially?**
359
+
360
+ Yes. The project is Apache 2.0 licensed (see [LICENSE](LICENSE)), which permits commercial use, modification, and redistribution, including inside closed-source products, subject to the license's own attribution and notice terms. There is no separate paid tier or commercial license.
361
+
362
+ ---
363
+
324
364
  ## Contributing
325
365
 
326
366
  - Read [CONTRIBUTING.md](CONTRIBUTING.md) before opening a PR
@@ -334,3 +374,4 @@ Apache 2.0. Contributions welcome.
334
374
  ---
335
375
 
336
376
  *Built by Rudrendu Paul*
377
+
@@ -4,7 +4,7 @@
4
4
 
5
5
  ![Terminal recording of agent-trace recording a live HTTP call, then replaying the same run offline with zero network requests](docs/assets/dev-to-demos/demo-1-record-replay.gif)
6
6
 
7
- [![PyPI](https://img.shields.io/pypi/v/agent-observability-trace)](https://pypi.org/project/agent-observability-trace/)
7
+ [![PyPI](https://img.shields.io/pypi/v/agent-observability-trace-cli)](https://pypi.org/project/agent-observability-trace-cli/)
8
8
  [![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE)
9
9
  [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
10
10
  [![CI](https://github.com/RudrenduPaul/agent-observability/actions/workflows/ci.yml/badge.svg)](https://github.com/RudrenduPaul/agent-observability/actions)
@@ -15,23 +15,25 @@
15
15
  ## Install
16
16
 
17
17
  ```bash
18
- pip install agent-observability-trace
18
+ pip install agent-observability-trace-cli
19
19
  # or
20
- uv add agent-observability-trace
20
+ uv add agent-observability-trace-cli
21
21
  ```
22
22
 
23
23
  LangGraph support:
24
24
 
25
25
  ```bash
26
- pip install agent-observability-trace[langgraph]
26
+ pip install agent-observability-trace-cli[langgraph]
27
27
  ```
28
28
 
29
29
  OpenAI Agents SDK support:
30
30
 
31
31
  ```bash
32
- pip install agent-observability-trace[openai-agents]
32
+ pip install agent-observability-trace-cli[openai-agents]
33
33
  ```
34
34
 
35
+ ![Terminal recording of installing agent-observability-trace-cli into a fresh virtual environment, then running agent-trace version and recording a first HTTP call with agent-trace list showing the resulting run](docs/demo.gif)
36
+
35
37
  ## The problem
36
38
 
37
39
  A LangGraph run fails after step 8. Your trace in LangSmith or Langfuse shows *what* broke. But to reproduce it you have to re-run the entire agent: 8 more LLM calls, 30 more seconds, another $0.15 in API cost. If the failure was caused by a specific tool response or a transient model output, you can't reproduce it at all. You're debugging against a moving target.
@@ -78,6 +80,8 @@ with replay("run_<id>") as ctx:
78
80
 
79
81
  > **Sync and async clients:** Agent Observability intercepts `httpx.Client`, `httpx.AsyncClient`, and `requests.Session` — including the async client used by default in the OpenAI Python SDK v1.x and Anthropic SDK. The patch is installed at request-dispatch time, so it also covers clients constructed before recording/replay starts (e.g. a module-level `openai.AsyncOpenAI()` instance).
80
82
 
83
+ ![Terminal recording of replaying a previously recorded run with zero network calls, then running agent-trace show to print the replayed span tree](docs/usage.gif)
84
+
81
85
  ---
82
86
 
83
87
  ## Use in CI: replay at zero cost
@@ -230,6 +234,42 @@ after:
230
234
 
231
235
  ---
232
236
 
237
+ ## FAQ
238
+
239
+ **What is Agent Observability, and how is it different from a typical LLM tracing tool?**
240
+
241
+ It's a Python library and CLI (`agent-trace`) that records every HTTP request and response your agent makes, verbatim, to a local SQLite fixture, then replays those exact bytes later with no network call. Most tracing tools, including LangSmith, Langfuse, Helicone, and OpenLLMetry, show you what happened during a run. Agent Observability additionally lets you reproduce that exact run offline, deterministically, without touching the live API. See "How Agent Observability compares" above for the full capability breakdown against those four tools.
242
+
243
+ **How does deterministic record/replay actually work?**
244
+
245
+ Recording patches `httpx.Client`, `httpx.AsyncClient`, and `requests.Session` at the transport layer (`src/agent_trace/interceptor/`) to capture every outbound request and response as raw bytes into `fixture.db`. Replay installs a `FixtureClock` (`src/agent_trace/core/clock.py`) and serves those same bytes back in the original sequence, so the code path, span tree, and timestamps all match the original recording. The benchmark numbers quoted above (0.011% recording overhead, 0.93ms mean replay latency, 100% fidelity) come from `benchmarks/test_overhead.py`, `benchmarks/test_replay_vs_live.py`, and `benchmarks/test_fidelity.py` in this repo, runnable yourself with `uv run pytest benchmarks/`.
246
+
247
+ **How do I install it, and what platforms does it support?**
248
+
249
+ `pip install agent-observability-trace-cli`, or `uv add agent-observability-trace-cli`. It requires Python 3.10 or newer and depends only on `httpx` and `rich`, no compiled extensions, so it installs anywhere those wheels do. CI (`.github/workflows/ci.yml`) currently runs on Ubuntu only; macOS and Windows aren't part of the automated test matrix, though nothing in the interceptor or replay engine touches OS-specific APIs. An npm wrapper, [`agent-observability-trace-cli`](npm/) (source under [`npm/`](npm/) in this repo), is also published for teams that reach for `npx`/`npm`, but it still shells out to the Python CLI under the hood, so the Python package must be installed too.
250
+
251
+ **How does this compare to LangSmith specifically?**
252
+
253
+ LangSmith's `LANGSMITH_TEST_CACHE` (VCR-style cassettes, via `langsmith[vcr]`) is the closest built-in equivalent. It's Python plus LangChain only, captures HTTP calls to `api.openai.com` rather than any HTTP client, doesn't record full wire-level bytes, and requires a LangSmith account. Agent Observability works with any Python HTTP client, plus dedicated interceptors for gRPC, aiohttp, botocore, and WebSocket traffic, records full request and response bytes locally, and needs no account or hosted service. Pick LangSmith if you're already on LangChain and want dataset management, prompt versioning, and human feedback loops alongside tracing. Pick Agent Observability if the goal is reproducing one specific failed run at zero API cost, regardless of which SDK made the call.
254
+
255
+ **What happens if replay can't find a matching fixture entry?**
256
+
257
+ With `AGENT_TRACE_NETWORK_GUARD=1` set, any request missing from the fixture raises `NetworkGuardError` immediately instead of silently falling through to a live call. The most common cause is an HTTP client constructed before the recording or replay context was entered, since the patch only applies to clients created inside the `start_trace`/`replay` block. See "Known limitations" above for the full list of edges, including partial gRPC streaming coverage and pre-HTTP exceptions that never reach the interceptor.
258
+
259
+ **Does it capture agents built on non-Python frameworks?**
260
+
261
+ No. Capture is a Python HTTP-transport interceptor plus instrumented callbacks for the integrations under `src/agent_trace/integrations/` (LangGraph, CrewAI, AutoGen, LlamaIndex, Haystack, Agno, PydanticAI, Google GenAI, and others). It only sees traffic from your own Python process. Agents built in other languages, or calls made by a third-party hosted service you don't run yourself, are outside its capture surface.
262
+
263
+ **Are fixture files safe to commit to version control?**
264
+
265
+ Not by default. `fixture.db` contains full HTTP request and response bodies, which means API keys and prompt contents whenever they appear in headers or payloads. Add `.agent-trace/` and `*.db` to `.gitignore`, and never commit a fixture recorded against a production API key. Strip or redact secrets first if you want to keep a fixture as a committed CI test asset.
266
+
267
+ **Is this free to use commercially?**
268
+
269
+ Yes. The project is Apache 2.0 licensed (see [LICENSE](LICENSE)), which permits commercial use, modification, and redistribution, including inside closed-source products, subject to the license's own attribution and notice terms. There is no separate paid tier or commercial license.
270
+
271
+ ---
272
+
233
273
  ## Contributing
234
274
 
235
275
  - Read [CONTRIBUTING.md](CONTRIBUTING.md) before opening a PR
@@ -243,3 +283,4 @@ Apache 2.0. Contributions welcome.
243
283
  ---
244
284
 
245
285
  *Built by Rudrendu Paul*
286
+
@@ -0,0 +1,198 @@
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship made available under
36
+ the License, as indicated by a copyright notice that is included in
37
+ or attached to the work (an example is provided in the Appendix below).
38
+
39
+ "Derivative Works" shall mean any work, whether in Source or Object
40
+ form, that is based on (or derived from) the Work and for which the
41
+ editorial revisions, annotations, elaborations, or other modifications
42
+ represent, as a whole, an original work of authorship. For the purposes
43
+ of this License, Derivative Works shall not include works that remain
44
+ separable from, or merely link (or bind by name) to the interfaces of,
45
+ the Work and Derivative Works thereof.
46
+
47
+ "Contribution" shall mean, as submitted to the Licensor for inclusion
48
+ in the Work by the copyright owner or by an individual or Legal Entity
49
+ authorized to submit on behalf of the copyright owner. For the purposes
50
+ of this definition, "submitted" means any form of electronic, verbal,
51
+ or written communication sent to the Licensor or its representatives,
52
+ including but not limited to communication on electronic mailing lists,
53
+ source code control systems, and issue tracking systems that are managed
54
+ by, or on behalf of, the Licensor for the purpose of discussing and
55
+ improving the Work, but excluding communication that is conspicuously
56
+ marked or designated in writing by the copyright owner as "Not a
57
+ Contribution."
58
+
59
+ "Contributor" shall mean Licensor and any Legal Entity on behalf of
60
+ whom a Contribution has been received by the Licensor and incorporated
61
+ within the Work.
62
+
63
+ 2. Grant of Copyright License. Subject to the terms and conditions of
64
+ this License, each Contributor hereby grants to You a perpetual,
65
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
66
+ copyright license to reproduce, prepare Derivative Works of,
67
+ publicly display, publicly perform, sublicense, and distribute the
68
+ Work and such Derivative Works in Source or Object form.
69
+
70
+ 3. Grant of Patent License. Subject to the terms and conditions of
71
+ this License, each Contributor hereby grants to You a perpetual,
72
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
73
+ (except as stated in this section) patent license to make, have made,
74
+ use, offer to sell, sell, import, and otherwise transfer the Work,
75
+ where such license applies only to those patent claims licensable
76
+ by such Contributor that are necessarily infringed by their
77
+ Contribution(s) alone or by combination of their Contribution(s)
78
+ with the Work to which such Contribution(s) was submitted. If You
79
+ institute patent litigation against any entity (including a
80
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
81
+ or a Contribution incorporated within the Work constitutes direct
82
+ or contributory patent infringement, then any patent licenses
83
+ granted to You under this License for that Work shall terminate
84
+ as of the date such litigation is filed.
85
+
86
+ 4. Redistribution. You may reproduce and distribute copies of the
87
+ Work or Derivative Works thereof in any medium, with or without
88
+ modifications, and in Source or Object form, provided that You
89
+ meet the following conditions:
90
+
91
+ (a) You must give any other recipients of the Work or Derivative
92
+ Works a copy of this License; and
93
+
94
+ (b) You must cause any modified files to carry prominent notices
95
+ stating that You changed the files; and
96
+
97
+ (c) You must retain, in the Source form of any Derivative Works
98
+ that You distribute, all copyright, patent, trademark, and
99
+ attribution notices from the Source form of the Work,
100
+ excluding those notices that do not pertain to any part of
101
+ the Derivative Works; and
102
+
103
+ (d) If the Work includes a "NOTICE" text file as part of its
104
+ distribution, You must include a readable copy of the
105
+ attribution notices contained within such NOTICE file, in
106
+ at least one of the following places: within a NOTICE text
107
+ file distributed as part of the Derivative Works; within
108
+ the Source form or documentation, if provided along with the
109
+ Derivative Works; or, within a display generated by the
110
+ Derivative Works, if and wherever such third-party notices
111
+ normally appear. The contents of the NOTICE file are for
112
+ informational purposes only and do not modify the License.
113
+ You may add Your own attribution notices within Derivative
114
+ Works that You distribute, alongside or as an addendum to
115
+ the NOTICE text from the Work, provided that such additional
116
+ attribution notices cannot be construed as modifying the
117
+ License.
118
+
119
+ You may add Your own license statement for Your modifications and
120
+ may provide additional grant of rights to use, copy, modify, merge,
121
+ publish, distribute, sublicense, and/or sell copies of the
122
+ Contribution, either on an unchanged basis, or on the basis of
123
+ derivatives of it, solely to the extent these changes are necessary
124
+ to conform to other license requirements applicable to those
125
+ derivatives.
126
+
127
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
128
+ any Contribution intentionally submitted for inclusion in the Work
129
+ by You to the Licensor shall be under the terms and conditions of
130
+ this License, without any additional terms or conditions.
131
+ Notwithstanding the above, nothing herein shall supersede or modify
132
+ the terms of any separate license agreement you may have executed
133
+ with Licensor regarding such Contributions.
134
+
135
+ 6. Trademarks. This License does not grant permission to use the trade
136
+ names, trademarks, service marks, or product names of the Licensor,
137
+ except as required for reasonable and customary use in describing the
138
+ origin of the Work and reproducing the content of the NOTICE file.
139
+
140
+ 7. Disclaimer of Warranty. Unless required by applicable law or
141
+ agreed to in writing, Licensor provides the Work (and each
142
+ Contributor provides its Contributions) on an "AS IS" BASIS,
143
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
144
+ implied, including, without limitation, any warranties or conditions
145
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
146
+ PARTICULAR PURPOSE. You are solely responsible for determining the
147
+ appropriateness of using or reproducing the Work and assume any
148
+ risks associated with Your exercise of permissions under this License.
149
+
150
+ 8. Limitation of Liability. In no event and under no legal theory,
151
+ whether in tort (including negligence), contract, or otherwise,
152
+ unless required by applicable law (such as deliberate and grossly
153
+ negligent acts) or agreed to in writing, shall any Contributor be
154
+ liable to You for damages, including any direct, indirect, special,
155
+ incidental, or exemplary damages of any character arising as a
156
+ result of this License or out of the use or inability to use the
157
+ Work (including but not limited to damages for loss of goodwill,
158
+ work stoppage, computer failure or malfunction, or all other
159
+ commercial damages or losses), even if such Contributor has been
160
+ advised of the possibility of such damages.
161
+
162
+ 9. Accepting Warranty or Additional Liability. While redistributing
163
+ the Work or Derivative Works thereof, You may choose to offer,
164
+ and charge a fee for, acceptance of support, warranty, indemnity,
165
+ or other liability obligations and/or rights consistent with this
166
+ License. However, in accepting such obligations, You may act only
167
+ on Your own behalf and on Your sole responsibility, not on behalf
168
+ of any other Contributor, and only if You agree to indemnify,
169
+ defend, and hold each Contributor harmless for any liability
170
+ incurred by, or claims asserted against, such Contributor by reason
171
+ of your accepting any such warranty or additional liability.
172
+
173
+ END OF TERMS AND CONDITIONS
174
+
175
+ APPENDIX: How to apply the Apache License to your work.
176
+
177
+ To apply the Apache License to your work, attach the following
178
+ boilerplate notice, with the fields enclosed by brackets "[]"
179
+ replaced with your own identifying information. (Don't include
180
+ the brackets!) The text should be enclosed in the appropriate
181
+ comment syntax for the file format in question. It is also
182
+ recommended that a file or directory name and a description of the
183
+ purpose of the file be included on the same "PRINT" or "on the
184
+ first page" of each appropriate file.
185
+
186
+ Copyright 2026 Rudrendu Paul and Sourav Nandy
187
+
188
+ Licensed under the Apache License, Version 2.0 (the "License");
189
+ you may not use this file except in compliance with the License.
190
+ You may obtain a copy of the License at
191
+
192
+ http://www.apache.org/licenses/LICENSE-2.0
193
+
194
+ Unless required by applicable law or agreed to in writing, software
195
+ distributed under the License is distributed on an "AS IS" BASIS,
196
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
197
+ See the License for the specific language governing permissions and
198
+ limitations under the License.
@@ -0,0 +1,135 @@
1
+ # agent-observability-trace-cli (npm wrapper)
2
+
3
+ An npm-installable wrapper for [`agent-trace`](https://github.com/RudrenduPaul/agent-observability), the deterministic record/replay tool for LLM agents. This package does not reimplement `agent-trace`. It puts the real `agent-trace` command on your PATH through `npm install`/`npx`, then forwards every argument straight through to the actual Python CLI.
4
+
5
+ ## What agent-trace does
6
+
7
+ `agent-trace` records every HTTP request and response your agent makes, verbatim, to a local SQLite fixture, then replays those exact bytes later with zero network calls. It patches `httpx.Client`, `httpx.AsyncClient`, and `requests.Session` at the transport layer, so it works with any Python HTTP client, including the clients used internally by the OpenAI Python SDK and the Anthropic SDK. The project's own benchmark suite (`benchmarks/test_overhead.py`, `benchmarks/test_replay_vs_live.py`, `benchmarks/test_fidelity.py` in the main repo) reports 0.011% recording overhead, 0.93ms mean replay latency, and byte-for-byte replay fidelity, at $0 API cost per replay.
8
+
9
+ ## Why this wrapper exists
10
+
11
+ `agent-trace` is a Python tool. If your team, CI pipeline, or agent harness already reaches for `npx` to run CLIs, this wrapper skips the "how do I invoke a Python tool from a Node-first workflow" step. It is a thin exec-and-forward shim, nothing more: the actual record/replay engine, interceptors, and CLI logic all live in the `agent_trace` Python package.
12
+
13
+ ## Prerequisites
14
+
15
+ - Python 3.10 or newer
16
+ - The [`agent-observability-trace-cli`](https://pypi.org/project/agent-observability-trace-cli/) PyPI package installed on the same machine (its console command is `agent-trace`):
17
+
18
+ ```bash
19
+ pip install agent-observability-trace-cli
20
+ # or
21
+ uv add agent-observability-trace-cli
22
+ # or, for an isolated global install
23
+ pipx install agent-observability-trace-cli
24
+ ```
25
+
26
+ Without that package installed, this wrapper prints install instructions and exits non-zero. It never installs anything on your behalf.
27
+
28
+ ## Install
29
+
30
+ ```bash
31
+ npm install -g agent-observability-trace-cli
32
+ # or run without installing
33
+ npx agent-observability-trace-cli version
34
+ ```
35
+
36
+ ## Usage
37
+
38
+ Once installed, `agent-trace` on your PATH is this wrapper, and every subcommand is forwarded unchanged to the real CLI:
39
+
40
+ ```bash
41
+ agent-trace version
42
+ agent-trace list
43
+ agent-trace show run_abc123def456
44
+ agent-trace show run_abc123def456 --errors-only
45
+ agent-trace replay run_abc123def456
46
+ agent-trace inspect run_abc123def456
47
+ agent-trace diff run_a run_b
48
+ agent-trace run -- langgraph dev
49
+ ```
50
+
51
+ A recording/replay round trip in Python, using the underlying library directly:
52
+
53
+ ```python
54
+ from agent_trace import tracer
55
+ import httpx
56
+
57
+ @tracer.instrument(record=True)
58
+ def fetch_data(query: str) -> dict:
59
+ with tracer.span("http-call") as span:
60
+ resp = httpx.get("https://httpbin.org/get", params={"q": query})
61
+ span.set_attribute("http.status_code", resp.status_code)
62
+ return resp.json()
63
+
64
+ result = fetch_data("hello")
65
+ # Trace and fixture saved to ~/.agent-trace/runs/run_<id>/
66
+ ```
67
+
68
+ Full command reference, the record/replay model, and framework integrations (LangGraph, OpenAI Agents SDK, CrewAI, and more) are documented in the [main repository](https://github.com/RudrenduPaul/agent-observability).
69
+
70
+ ## How it works
71
+
72
+ The `agent-trace` bin script this package installs does two things, in order:
73
+
74
+ 1. Looks for a real `agent-trace` executable on your PATH (the console script `pip`/`uv`/`pipx` installs) and execs it with your arguments.
75
+ 2. If that isn't found, falls back to invoking the `agent_trace` Python module directly through `python3`/`python`.
76
+
77
+ If neither is available, it prints the install instructions above and exits with a non-zero status.
78
+
79
+ ## How it compares
80
+
81
+ Most observability tools for LLM agents, including LangSmith, Langfuse, Helicone, and OpenLLMetry, are observe-only: they show you a trace of what happened, but reproducing a failure still means re-running the full agent against live APIs. `agent-trace` additionally lets you reproduce that exact run offline, deterministically, without touching the live API.
82
+
83
+ The closest built-in comparison is LangSmith's `LANGSMITH_TEST_CACHE` (VCR-style cassettes via `langsmith[vcr]`). It's Python plus LangChain only, captures HTTP calls to `api.openai.com` specifically rather than any HTTP client, doesn't record full wire-level bytes, and requires a LangSmith account. `agent-trace` works with any Python HTTP client, records full request and response bytes locally, and needs no account or hosted service.
84
+
85
+ The full capability table against LangSmith, Langfuse, Helicone, and OpenLLMetry lives in the [main repository's README](https://github.com/RudrenduPaul/agent-observability#how-agent-observability-compares).
86
+
87
+ ## Known limitations
88
+
89
+ This wrapper only forwards arguments; the limitations below belong to `agent-trace` itself (documented in full in the main repo's README):
90
+
91
+ - Recording and replay happen inside the Python process you import `agent_trace` into. It cannot observe or replay calls made by a third-party hosted service you don't run yourself, only your own process's outbound calls.
92
+ - gRPC coverage is partial: unary-unary and sync unary-stream calls (used by Gemini/Vertex AI) are captured and replayed, but client-streaming, bidirectional-streaming, and any `grpc.aio` streaming call are not.
93
+ - Capture starts once a fully-constructed HTTP request object reaches the interceptor. Exceptions raised earlier, while an SDK is still serializing a tool schema or building headers, produce zero fixture rows unless a wired-in framework integration's own error callback catches them first.
94
+
95
+ ## FAQ
96
+
97
+ **Does this package reimplement `agent-trace` in JavaScript?**
98
+
99
+ No. It is a thin wrapper. The `bin/agent-trace.js` script it installs execs the real `agent-trace` console script if it finds one on your PATH, or falls back to invoking the `agent_trace` Python module through `python3`/`python`. All record/replay logic, HTTP interceptors, and CLI commands live in the Python package.
100
+
101
+ **Why would I install a Node wrapper for a Python tool?**
102
+
103
+ If your team already standardizes on `npx`/`npm` to run CLIs, whether in local scripts, CI steps, or agent tooling, this lets `agent-trace` slot into that same invocation pattern without a separate "activate a Python environment first" step. You still need the Python package installed; this wrapper does not remove that dependency.
104
+
105
+ **What do I need installed before this works?**
106
+
107
+ Python 3.10 or newer, plus the `agent-observability-trace-cli` PyPI package (`pip install agent-observability-trace-cli`, `uv add agent-observability-trace-cli`, or `pipx install agent-observability-trace-cli`). This npm package alone does nothing useful without it.
108
+
109
+ **What happens if I run `agent-trace` through this wrapper without the Python package installed?**
110
+
111
+ The wrapper tries the real console script first, then falls back to a direct Python module import. If both fail, it prints the exact `pip`/`uv`/`pipx` install commands above and exits with a non-zero status. It never installs anything automatically.
112
+
113
+ **Which commands does this wrapper support?**
114
+
115
+ All of them, unmodified. Every argument you pass to `agent-trace` through this wrapper is forwarded verbatim to the real CLI, so `agent-trace version`, `agent-trace list`, `agent-trace show <run-id>`, `agent-trace replay <run-id>`, `agent-trace inspect <run-id>`, `agent-trace diff <run-a> <run-b>`, and `agent-trace run -- <command>` all work exactly as documented in the main repository.
116
+
117
+ **How is this different from LangSmith's tracing/caching?**
118
+
119
+ LangSmith's `LANGSMITH_TEST_CACHE` needs LangChain and a LangSmith account, and only captures calls to `api.openai.com`. `agent-trace` works with any Python HTTP client (`httpx`, `requests`, and the transports used inside the OpenAI and Anthropic SDKs), records full request/response bytes locally, and needs no account. See the comparison table in the main repository for the full breakdown against LangSmith, Langfuse, Helicone, and OpenLLMetry.
120
+
121
+ **Does this wrapper work on Windows?**
122
+
123
+ The wrapper itself is plain Node.js and has no OS-specific code. Whether the underlying `agent-trace` Python package works on your platform depends on that package's own support, documented in the main repository; its automated CI currently runs on Ubuntu only.
124
+
125
+ **Is it safe to commit recorded fixtures to version control?**
126
+
127
+ Not by default, and this is a property of `agent-trace` itself, not this wrapper. Fixture files can contain full HTTP request and response bodies, including API keys and prompt contents. See the main repository's README for guidance on `.gitignore` entries and redacting secrets before committing a fixture.
128
+
129
+ **Is this free to use commercially?**
130
+
131
+ Yes. Both this npm package and the underlying `agent-observability-trace-cli` PyPI package are Apache 2.0 licensed, which permits commercial use, modification, and redistribution, subject to the license's attribution and notice terms.
132
+
133
+ ## License
134
+
135
+ Apache-2.0
@@ -0,0 +1,63 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+
4
+ const { spawnSync } = require("node:child_process");
5
+
6
+ const args = process.argv.slice(2);
7
+
8
+ const INSTALL_HELP = `
9
+ agent-trace-cli is an npm wrapper: the actual CLI ships as a Python package.
10
+
11
+ Install it, then re-run this command:
12
+
13
+ pip install agent-observability-trace-cli
14
+ # or
15
+ uv add agent-observability-trace-cli
16
+ # or, for an isolated global install
17
+ pipx install agent-observability-trace-cli
18
+
19
+ Docs: https://github.com/RudrenduPaul/agent-observability
20
+ `;
21
+
22
+ function run(command, commandArgs) {
23
+ return spawnSync(command, commandArgs, { stdio: "inherit" });
24
+ }
25
+
26
+ // Preferred path: the real "agent-trace" console script is on PATH
27
+ // (installed via pip/uv/pipx per project.scripts in pyproject.toml).
28
+ let result = run("agent-trace", args);
29
+ if (!(result.error && result.error.code === "ENOENT")) {
30
+ if (result.error) {
31
+ throw result.error;
32
+ }
33
+ process.exit(result.status === null ? 1 : result.status);
34
+ }
35
+
36
+ // Fallback: agent-trace's console script isn't on PATH (e.g. pip
37
+ // installed into a venv not exported to PATH). Try invoking the
38
+ // module's CLI entry point directly through Python. Output is
39
+ // captured (not streamed) here so a missing module can be turned into
40
+ // the friendlier INSTALL_HELP message below instead of a raw traceback.
41
+ const pyScript =
42
+ "import sys; from agent_trace._cli import main; sys.argv = ['agent-trace'] + sys.argv[1:]; main()";
43
+ let pythonFound = false;
44
+ for (const python of ["python3", "python"]) {
45
+ const pyResult = spawnSync(python, ["-c", pyScript, ...args], {
46
+ stdio: ["inherit", "inherit", "pipe"],
47
+ encoding: "utf8",
48
+ });
49
+ if (pyResult.error && pyResult.error.code === "ENOENT") {
50
+ continue;
51
+ }
52
+ pythonFound = true;
53
+ if (pyResult.stderr && pyResult.stderr.includes("ModuleNotFoundError: No module named 'agent_trace'")) {
54
+ break;
55
+ }
56
+ if (pyResult.stderr) {
57
+ process.stderr.write(pyResult.stderr);
58
+ }
59
+ process.exit(pyResult.status === null ? 1 : pyResult.status);
60
+ }
61
+
62
+ process.stderr.write(INSTALL_HELP);
63
+ process.exit(1);
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "agent-observability-trace-cli",
3
+ "version": "0.1.0",
4
+ "description": "npm-installable CLI wrapper for agent-trace, deterministic record/replay for LLM agents. Requires Python 3.10+ and the agent-observability-trace-cli PyPI package.",
5
+ "bin": {
6
+ "agent-trace": "bin/agent-trace.js"
7
+ },
8
+ "files": [
9
+ "bin",
10
+ "LICENSE",
11
+ "README.md"
12
+ ],
13
+ "keywords": [
14
+ "agent-trace",
15
+ "ai-agents",
16
+ "observability",
17
+ "tracing",
18
+ "llm",
19
+ "langgraph",
20
+ "openai",
21
+ "record-replay",
22
+ "debugging",
23
+ "cli"
24
+ ],
25
+ "homepage": "https://github.com/RudrenduPaul/agent-observability#readme",
26
+ "repository": {
27
+ "type": "git",
28
+ "url": "git+https://github.com/RudrenduPaul/agent-observability.git",
29
+ "directory": "npm"
30
+ },
31
+ "bugs": {
32
+ "url": "https://github.com/RudrenduPaul/agent-observability/issues"
33
+ },
34
+ "license": "Apache-2.0",
35
+ "author": "Rudrendu Paul",
36
+ "engines": {
37
+ "node": ">=18"
38
+ }
39
+ }
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "agent-observability-trace-cli"
7
- version = "0.1.2"
7
+ version = "0.1.3"
8
8
  description = "AI agent observability with deterministic record/replay — capture any LangGraph or OpenAI Agents SDK run, replay it offline at zero API cost."
9
9
  readme = "README.md"
10
10
  license = {text = "Apache-2.0"}