agentloop-profiler 0.1.0__tar.gz → 0.1.1__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 (318) hide show
  1. agentloop_profiler-0.1.1/PKG-INFO +448 -0
  2. agentloop_profiler-0.1.1/README.md +390 -0
  3. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/autoinstrument.py +13 -2
  4. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/cli.py +55 -17
  5. agentloop_profiler-0.1.1/agentloop/cli_paths.py +47 -0
  6. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/client.py +87 -18
  7. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/entrypoint.py +6 -0
  8. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/events.py +5 -1
  9. agentloop_profiler-0.1.1/agentloop/integrations/hermes.py +78 -0
  10. agentloop_profiler-0.1.1/agentloop/integrations/hermes_cli.py +23 -0
  11. agentloop_profiler-0.1.1/agentloop/integrations/hermes_recorder.py +532 -0
  12. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/sdk.py +7 -1
  13. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/quality.py +2 -0
  14. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/tracer.py +8 -0
  15. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/version.py +1 -1
  16. agentloop_profiler-0.1.1/agentloop_profiler.egg-info/PKG-INFO +448 -0
  17. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop_profiler.egg-info/SOURCES.txt +8 -0
  18. agentloop_profiler-0.1.1/agentloop_profiler.egg-info/entry_points.txt +5 -0
  19. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop_profiler.egg-info/requires.txt +9 -2
  20. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/pyproject.toml +43 -9
  21. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_api_versioning.py +2 -2
  22. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_bump_version.py +91 -1
  23. agentloop_profiler-0.1.1/tests/test_cli_output_paths.py +299 -0
  24. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_client.py +2 -2
  25. agentloop_profiler-0.1.1/tests/test_client_transport.py +123 -0
  26. agentloop_profiler-0.1.1/tests/test_distribution_metadata.py +97 -0
  27. agentloop_profiler-0.1.1/tests/test_hermes_integration.py +487 -0
  28. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_python_support.py +3 -0
  29. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_release_workflows.py +4 -3
  30. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_repository_policy_traversal.py +19 -0
  31. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_streamlit_compat.py +4 -2
  32. agentloop_profiler-0.1.1/tests/test_trace_failure_recording.py +45 -0
  33. agentloop_profiler-0.1.0/PKG-INFO +0 -513
  34. agentloop_profiler-0.1.0/README.md +0 -462
  35. agentloop_profiler-0.1.0/agentloop_profiler.egg-info/PKG-INFO +0 -513
  36. agentloop_profiler-0.1.0/agentloop_profiler.egg-info/entry_points.txt +0 -2
  37. agentloop_profiler-0.1.0/tests/test_distribution_metadata.py +0 -41
  38. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/LICENSE +0 -0
  39. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/THIRD_PARTY_LICENSES.md +0 -0
  40. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/__init__.py +0 -0
  41. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/ablation_protocol.py +0 -0
  42. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/ablations.py +0 -0
  43. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/aggregate_cli.py +0 -0
  44. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/aggregate_stats.py +0 -0
  45. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/aggregates.py +0 -0
  46. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/audit.py +0 -0
  47. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/batch_experiments.py +0 -0
  48. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/batching.py +0 -0
  49. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/budget_types.py +0 -0
  50. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/budgets.py +0 -0
  51. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/calibration.py +0 -0
  52. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/checkpoint_state.py +0 -0
  53. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/checkpoint_store.py +0 -0
  54. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/ci.py +0 -0
  55. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/completion.py +0 -0
  56. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/completion_types.py +0 -0
  57. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/config.py +0 -0
  58. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/context_controls.py +0 -0
  59. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/context_experiments.py +0 -0
  60. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/context_types.py +0 -0
  61. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/costs.py +0 -0
  62. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/cursor_validation.py +0 -0
  63. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/decorators.py +0 -0
  64. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/demo.py +0 -0
  65. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/doctor.py +0 -0
  66. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/drift.py +0 -0
  67. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/drift_cli.py +0 -0
  68. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/drift_types.py +0 -0
  69. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/drift_windows.py +0 -0
  70. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/estimates.py +0 -0
  71. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/experiment_artifacts.py +0 -0
  72. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/experiment_observations.py +0 -0
  73. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/experiment_reports.py +0 -0
  74. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/experiment_types.py +0 -0
  75. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/experiments.py +0 -0
  76. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/exporters.py +0 -0
  77. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/finding_benchmark_types.py +0 -0
  78. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/finding_benchmarks.py +0 -0
  79. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/findings.py +0 -0
  80. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/graph.py +0 -0
  81. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/harness.py +0 -0
  82. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/harness_bench/__init__.py +0 -0
  83. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/harness_bench/cli.py +0 -0
  84. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/harness_bench/drivers.py +0 -0
  85. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/harness_bench/offline.py +0 -0
  86. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/harness_evidence.py +0 -0
  87. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/harness_usage.py +0 -0
  88. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/html_report.py +0 -0
  89. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/__init__.py +0 -0
  90. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/crewai.py +0 -0
  91. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/harbor/__init__.py +0 -0
  92. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/harbor/atif.py +0 -0
  93. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/harbor/atif_validation.py +0 -0
  94. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/harbor/cli.py +0 -0
  95. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/harbor/manifest.py +0 -0
  96. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/harbor/trial_evidence.py +0 -0
  97. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/harbor/trials.py +0 -0
  98. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/harbor/verifier.py +0 -0
  99. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/langgraph.py +0 -0
  100. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/langgraph_harness.py +0 -0
  101. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/langgraph_recovery.py +0 -0
  102. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/omnigent/__init__.py +0 -0
  103. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/omnigent/cli.py +0 -0
  104. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/omnigent/evidence.py +0 -0
  105. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/omnigent/telemetry.py +0 -0
  106. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/openai.py +0 -0
  107. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/openai_agents.py +0 -0
  108. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/vercel_ai.py +0 -0
  109. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/interoperability/__init__.py +0 -0
  110. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/interoperability/artifacts.py +0 -0
  111. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/interoperability/cli.py +0 -0
  112. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/interoperability/cohort_evidence.py +0 -0
  113. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/interoperability/cohorts.py +0 -0
  114. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/interoperability/contracts.py +0 -0
  115. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/interoperability/coordination.py +0 -0
  116. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/interoperability/evidence.py +0 -0
  117. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/interoperability/otlp_jsonl.py +0 -0
  118. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/interoperability/otlp_validation.py +0 -0
  119. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/interoperability/registry.py +0 -0
  120. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/interoperability/validation.py +0 -0
  121. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/intervention_service.py +0 -0
  122. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/intervention_store.py +0 -0
  123. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/interventions.py +0 -0
  124. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/issues.py +0 -0
  125. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/judgment_adapters.py +0 -0
  126. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/judgment_benchmark_types.py +0 -0
  127. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/judgment_benchmarks.py +0 -0
  128. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/judgment_types.py +0 -0
  129. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/judgment_views.py +0 -0
  130. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/judgments.py +0 -0
  131. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/loop_guards.py +0 -0
  132. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/loop_types.py +0 -0
  133. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/markdown.py +0 -0
  134. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/metrics.py +0 -0
  135. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/migrations.py +0 -0
  136. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/model_routing.py +0 -0
  137. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/onboarding.py +0 -0
  138. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/operations.py +0 -0
  139. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/optimizer.py +0 -0
  140. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/otel.py +0 -0
  141. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/otel_ids.py +0 -0
  142. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/otel_semantics.py +0 -0
  143. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/parallelism.py +0 -0
  144. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/patches.py +0 -0
  145. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/plan_export.py +0 -0
  146. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/policy_promotion.py +0 -0
  147. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/promotion_evidence.py +0 -0
  148. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/promotion_types.py +0 -0
  149. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/ranking.py +0 -0
  150. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/recovery_evidence.py +0 -0
  151. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/replay.py +0 -0
  152. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/retention.py +0 -0
  153. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/retention_types.py +0 -0
  154. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/reuse_experiments.py +0 -0
  155. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/routing_checks.py +0 -0
  156. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/routing_types.py +0 -0
  157. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/rules.py +0 -0
  158. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/runtime.py +0 -0
  159. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/savings.py +0 -0
  160. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/scheduling_plan.py +0 -0
  161. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/scheduling_types.py +0 -0
  162. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/schema.py +0 -0
  163. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/semantic_rules.py +0 -0
  164. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/semantic_waste.py +0 -0
  165. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/semantic_waste_types.py +0 -0
  166. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/server.py +0 -0
  167. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/store.py +0 -0
  168. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/structural_experiments.py +0 -0
  169. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/structural_types.py +0 -0
  170. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/structured_quality.py +0 -0
  171. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/studies.py +0 -0
  172. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/study_statistics.py +0 -0
  173. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/substitution_evidence.py +0 -0
  174. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/substitution_export.py +0 -0
  175. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/substitution_reports.py +0 -0
  176. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/substitution_types.py +0 -0
  177. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/substitutions.py +0 -0
  178. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/timing.py +0 -0
  179. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/tokens.py +0 -0
  180. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/tool_scheduling.py +0 -0
  181. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/trace_sources.py +0 -0
  182. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/value.py +0 -0
  183. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/workflow_types.py +0 -0
  184. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/workflows.py +0 -0
  185. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop_profiler.egg-info/dependency_links.txt +0 -0
  186. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop_profiler.egg-info/top_level.txt +0 -0
  187. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/dashboard/__init__.py +0 -0
  188. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/dashboard/app.py +0 -0
  189. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/dashboard/streamlit_compat.py +0 -0
  190. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/dashboard/trace_upload.py +0 -0
  191. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/dashboard/value_view.py +0 -0
  192. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/setup.cfg +0 -0
  193. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_ablations.py +0 -0
  194. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_aggregates.py +0 -0
  195. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_batch_data_pipeline.py +0 -0
  196. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_budgets.py +0 -0
  197. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_calibration.py +0 -0
  198. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_capability_registry.py +0 -0
  199. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_checkpoint_recovery.py +0 -0
  200. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_ci_command.py +0 -0
  201. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_ci_evidence.py +0 -0
  202. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_cli_store_commands.py +0 -0
  203. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_cli_trace_inputs.py +0 -0
  204. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_completion.py +0 -0
  205. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_context_controls.py +0 -0
  206. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_context_reuse_experiments.py +0 -0
  207. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_context_study.py +0 -0
  208. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_costs.py +0 -0
  209. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_crewai_integration.py +0 -0
  210. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_cursor_server.py +0 -0
  211. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_cursor_shape_validation.py +0 -0
  212. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_dashboard_input_validation.py +0 -0
  213. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_dashboard_quality.py +0 -0
  214. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_dashboard_semantic_waste.py +0 -0
  215. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_dashboard_structured_quality.py +0 -0
  216. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_dashboard_trace_upload.py +0 -0
  217. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_dashboard_value_view.py +0 -0
  218. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_dashboard_workflows.py +0 -0
  219. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_decorators.py +0 -0
  220. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_demo_cli.py +0 -0
  221. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_dependabot_config.py +0 -0
  222. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_diagnosis_api.py +0 -0
  223. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_doctor_autoinstrument.py +0 -0
  224. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_drift.py +0 -0
  225. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_email_workflow.py +0 -0
  226. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_empirical_calibration.py +0 -0
  227. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_enforcement_conformance.py +0 -0
  228. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_estimates.py +0 -0
  229. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_evidence_workflow.py +0 -0
  230. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_experiments.py +0 -0
  231. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_exporters.py +0 -0
  232. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_external_cohorts.py +0 -0
  233. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_finding_benchmarks.py +0 -0
  234. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_finding_identity.py +0 -0
  235. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_finding_rules.py +0 -0
  236. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_first_use_cli.py +0 -0
  237. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_graph.py +0 -0
  238. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_harbor_atif.py +0 -0
  239. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_harbor_trials.py +0 -0
  240. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_harness.py +0 -0
  241. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_harness_bench.py +0 -0
  242. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_harness_error_usage.py +0 -0
  243. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_harness_evidence.py +0 -0
  244. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_html_report.py +0 -0
  245. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_incident_triage.py +0 -0
  246. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_integration_conformance.py +0 -0
  247. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_interoperability_contracts.py +0 -0
  248. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_interventions.py +0 -0
  249. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_issues.py +0 -0
  250. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_judgment_adapters.py +0 -0
  251. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_judgment_benchmarks.py +0 -0
  252. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_judgment_evidence.py +0 -0
  253. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_judgment_provider_optional.py +0 -0
  254. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_judgments.py +0 -0
  255. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_langgraph_conformance.py +0 -0
  256. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_langgraph_harness.py +0 -0
  257. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_langgraph_integration.py +0 -0
  258. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_langgraph_recovery.py +0 -0
  259. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_loop_guards.py +0 -0
  260. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_markdown.py +0 -0
  261. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_markdown_exporters.py +0 -0
  262. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_marketplace_workflow.py +0 -0
  263. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_metrics.py +0 -0
  264. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_migrations.py +0 -0
  265. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_model_batching.py +0 -0
  266. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_model_routing.py +0 -0
  267. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_multiagent_coordination.py +0 -0
  268. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_non_agent_study.py +0 -0
  269. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_omnigent_telemetry.py +0 -0
  270. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_onboarding.py +0 -0
  271. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_openai_agents_integration.py +0 -0
  272. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_openai_integration.py +0 -0
  273. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_operations.py +0 -0
  274. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_optimizer.py +0 -0
  275. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_otel_ids.py +0 -0
  276. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_otel_interop.py +0 -0
  277. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_otlp_jsonl.py +0 -0
  278. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_parallelization_evidence.py +0 -0
  279. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_patch_plan.py +0 -0
  280. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_payment_review.py +0 -0
  281. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_policy_promotion.py +0 -0
  282. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_quality.py +0 -0
  283. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_ranking.py +0 -0
  284. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_real_agent_study.py +0 -0
  285. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_real_calibration_study.py +0 -0
  286. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_real_harness_study.py +0 -0
  287. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_remote_cli_credentials.py +0 -0
  288. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_replay.py +0 -0
  289. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_research_example.py +0 -0
  290. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_retention.py +0 -0
  291. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_routing_study.py +0 -0
  292. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_rule_error_privacy.py +0 -0
  293. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_runtime.py +0 -0
  294. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_savings_aggregation.py +0 -0
  295. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_scheduling_study.py +0 -0
  296. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_semantic_findings.py +0 -0
  297. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_semantic_waste.py +0 -0
  298. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_server.py +0 -0
  299. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_standalone_notices.py +0 -0
  300. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_store.py +0 -0
  301. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_store_contract.py +0 -0
  302. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_streaming_inventory.py +0 -0
  303. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_structural_experiments.py +0 -0
  304. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_structured_quality.py +0 -0
  305. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_structured_quality_evidence.py +0 -0
  306. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_studies.py +0 -0
  307. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_substitutions.py +0 -0
  308. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_telemetry_conformance.py +0 -0
  309. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_timing.py +0 -0
  310. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_token_provenance.py +0 -0
  311. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_tool_scheduling.py +0 -0
  312. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_trace_context.py +0 -0
  313. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_trace_schema.py +0 -0
  314. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_usefulness_benchmark.py +0 -0
  315. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_value.py +0 -0
  316. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_vercel_ai_integration.py +0 -0
  317. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_workflow_storage.py +0 -0
  318. {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_workflows.py +0 -0
@@ -0,0 +1,448 @@
1
+ Metadata-Version: 2.4
2
+ Name: agentloop-profiler
3
+ Version: 0.1.1
4
+ Summary: Profiler and optimization layer for AI agent execution graphs
5
+ Author: Dipesh Babu
6
+ License-Expression: Apache-2.0
7
+ Project-URL: Homepage, https://github.com/dipeshbabu/agentloop
8
+ Project-URL: Documentation, https://github.com/dipeshbabu/agentloop#readme
9
+ Project-URL: Repository, https://github.com/dipeshbabu/agentloop.git
10
+ Project-URL: Issues, https://github.com/dipeshbabu/agentloop/issues
11
+ Project-URL: Changelog, https://github.com/dipeshbabu/agentloop/blob/main/CHANGELOG.md
12
+ Keywords: ai-agents,agent-evaluation,observability,optimization,profiling,research,tracing
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Intended Audience :: Science/Research
16
+ Classifier: Operating System :: OS Independent
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3 :: Only
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3.13
22
+ Classifier: Programming Language :: Python :: 3.14
23
+ Classifier: Programming Language :: Python :: 3.15
24
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
25
+ Classifier: Topic :: Software Development :: Debuggers
26
+ Classifier: Topic :: Software Development :: Testing
27
+ Requires-Python: >=3.11
28
+ Description-Content-Type: text/markdown
29
+ License-File: LICENSE
30
+ License-File: THIRD_PARTY_LICENSES.md
31
+ Requires-Dist: typer>=0.12.0
32
+ Requires-Dist: rich>=13.0.0
33
+ Provides-Extra: dashboard
34
+ Requires-Dist: streamlit>=1.34.0; extra == "dashboard"
35
+ Requires-Dist: pandas>=2.0.0; extra == "dashboard"
36
+ Requires-Dist: pillow>=13.0.0; extra == "dashboard"
37
+ Requires-Dist: certifi>=2026.10.18; extra == "dashboard"
38
+ Requires-Dist: urllib3>=2.8.0; extra == "dashboard"
39
+ Provides-Extra: server
40
+ Requires-Dist: fastapi>=0.110.0; extra == "server"
41
+ Requires-Dist: uvicorn>=0.27.0; extra == "server"
42
+ Provides-Extra: postgres
43
+ Requires-Dist: psycopg[binary]>=3.3.8; extra == "postgres"
44
+ Provides-Extra: instrumentation
45
+ Requires-Dist: openai>=1.0.0; extra == "instrumentation"
46
+ Requires-Dist: certifi>=2026.10.18; extra == "instrumentation"
47
+ Provides-Extra: all
48
+ Requires-Dist: streamlit>=1.34.0; extra == "all"
49
+ Requires-Dist: pandas>=2.0.0; extra == "all"
50
+ Requires-Dist: fastapi>=0.110.0; extra == "all"
51
+ Requires-Dist: uvicorn>=0.27.0; extra == "all"
52
+ Requires-Dist: psycopg[binary]>=3.3.8; extra == "all"
53
+ Requires-Dist: openai>=1.0.0; extra == "all"
54
+ Requires-Dist: pillow>=13.0.0; extra == "all"
55
+ Requires-Dist: certifi>=2026.10.18; extra == "all"
56
+ Requires-Dist: urllib3>=2.8.0; extra == "all"
57
+ Dynamic: license-file
58
+
59
+ <h1 align="center">
60
+ <picture>
61
+ <source media="(prefers-color-scheme: dark)" srcset="docs/assets/agentloop-logo-dark.svg">
62
+ <img src="docs/assets/agentloop-logo-light.svg" alt="AgentLoop" width="440">
63
+ </picture>
64
+ </h1>
65
+
66
+ <p align="center">
67
+ <strong>Find wasted work in AI agents. Verify each change.</strong><br>
68
+ Trace calls, inspect findings, and compare performance with your quality checks.
69
+ </p>
70
+
71
+ <p align="center">
72
+ <a href="https://github.com/dipeshbabu/agentloop/actions/workflows/ci.yml"><img src="https://github.com/dipeshbabu/agentloop/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
73
+ <a href="https://pypi.org/project/agentloop-profiler/"><img src="https://img.shields.io/pypi/v/agentloop-profiler.svg?cacheSeconds=300" alt="PyPI"></a>
74
+ <a href="https://pepy.tech/projects/agentloop-profiler"><img src="https://static.pepy.tech/badge/agentloop-profiler/month" alt="Downloads/month"></a>
75
+ <a href="https://www.python.org/downloads/"><img src="https://img.shields.io/badge/python-3.11%2B-3776AB.svg" alt="Python 3.11 or newer"></a>
76
+ <a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-blue.svg" alt="License: Apache-2.0"></a>
77
+ </p>
78
+
79
+ <p align="center">
80
+ <a href="#quickstart">Quickstart</a> ·
81
+ <a href="#record-your-own-run">Trace your code</a> ·
82
+ <a href="#compare-before-and-after">Compare runs</a> ·
83
+ <a href="#framework-integrations">Integrations</a> ·
84
+ <a href="docs/FIRST_USE.md">Guide</a>
85
+ </p>
86
+
87
+ AgentLoop is a local profiler for AI agents and decision pipelines. It records
88
+ execution spans, reports latency and token usage, and identifies patterns such as
89
+ repeated calls, retry loops, and reused context. Compare saved runs to check whether
90
+ a change improves performance while still passing your output checks.
91
+
92
+ The core Python SDK and CLI work with JSON files. You can trace and analyze your
93
+ code without a hosted account or database. A dashboard, HTTP API, and shared
94
+ storage are available as optional components.
95
+
96
+ For Node.js and browser applications, the source checkout includes a
97
+ [TypeScript SDK](sdk/typescript/README.md) with native tracing and an API v1 client.
98
+ It has no runtime dependencies and has not yet been published to npm.
99
+
100
+ ## Quickstart
101
+
102
+ Install with Python 3.11 or newer:
103
+
104
+ ```bash
105
+ python -m pip install agentloop-profiler
106
+ agentloop quickstart
107
+ agentloop analyze runs/agentloop_quickstart.json --html runs/report.html --json-out runs/analysis.json
108
+ ```
109
+
110
+ Open `runs/report.html` in your browser to inspect the timeline and findings.
111
+ `runs/analysis.json` contains the trace, metrics, diagnosis, and optimization plan.
112
+
113
+ The package name is `agentloop-profiler`; the Python import and CLI command are
114
+ both `agentloop`. `quickstart` creates a labeled synthetic trace and makes no model
115
+ API calls. It tests your installation, not your application's performance.
116
+
117
+ If your shell cannot find `agentloop`, activate the Python environment where you
118
+ installed it. Run `agentloop doctor` to check the installation and available adapters.
119
+
120
+ For an isolated install, create an environment with `python -m venv .venv`, then
121
+ activate it with `source .venv/bin/activate` on Linux/macOS or
122
+ `.\.venv\Scripts\Activate.ps1` in Windows PowerShell before installing the package.
123
+
124
+ ## Record your own run
125
+
126
+ Save this as `example_agent.py`. It traces local functions and saves their output
127
+ for the quality check below. It runs without a model SDK or API key.
128
+
129
+ ```python
130
+ import agentloop
131
+
132
+ NOTES = {
133
+ "tracing": "Record the steps in a workflow.",
134
+ "optimization": "Investigate repeated or expensive work.",
135
+ "replay": "Compare saved baseline and candidate traces.",
136
+ }
137
+
138
+
139
+ @agentloop.trace_tool(name="lookup_note")
140
+ def lookup_note(topic: str) -> str:
141
+ return NOTES[topic]
142
+
143
+
144
+ with agentloop.trace_agent("research_agent") as trace:
145
+ output = {"notes": [lookup_note(topic) for topic in NOTES]}
146
+ trace.metadata["output"] = output
147
+
148
+ trace.export_json("runs/research_agent.json")
149
+ print(output)
150
+ ```
151
+
152
+ Run it and inspect the recorded calls:
153
+
154
+ ```bash
155
+ python example_agent.py
156
+ agentloop analyze runs/research_agent.json --html runs/research_agent.html
157
+ ```
158
+
159
+ The decorator records duration and status for each call. Wrap your application's
160
+ functions the same way, or use a [framework adapter](#framework-integrations).
161
+ SDK adapters can capture provider token usage; a generic decorator cannot infer
162
+ usage from an arbitrary return value.
163
+
164
+ Saving `metadata["output"]` is an explicit choice in this example. Review the
165
+ inputs, outputs, errors, and metadata you retain before sharing real traces.
166
+ See [trace retention](docs/TRACE_RETENTION.md) for capture controls.
167
+
168
+ ## Inspect findings
169
+
170
+ Start with `analyze` to see metrics, findings, and suggested changes together.
171
+ Findings link to the affected spans and describe the evidence and assumptions
172
+ behind each suggestion. A repeated tool name, for example, does not prove that
173
+ its calls are safe to run concurrently.
174
+
175
+ | Command | Purpose |
176
+ | --- | --- |
177
+ | `agentloop report runs/research_agent.json` | Inspect runtime, usage, costs, and call counts. |
178
+ | `agentloop diagnose --path runs/research_agent.json` | Inspect findings and their supporting spans. |
179
+ | `agentloop optimize --path runs/research_agent.json` | Review proposed optimizations and estimated savings. |
180
+ | `agentloop patch --path runs/research_agent.json --repo .` | Generate a repository patch plan for manual review. |
181
+
182
+ Optimization savings are predictions. Change one thing, record another run, and
183
+ measure the result. See [finding rules](docs/FINDING_RULES.md),
184
+ [parallelization evidence](docs/PARALLELIZATION.md), and
185
+ [estimator provenance](docs/ESTIMATORS.md) for how suggestions are derived.
186
+
187
+ ## Compare before and after
188
+
189
+ To try the comparison workflow before instrumenting your application:
190
+
191
+ ```bash
192
+ agentloop demo --kind proof
193
+ agentloop replay --baseline runs/agentloop_proof_baseline.json --candidate runs/agentloop_proof_candidate.json
194
+ ```
195
+
196
+ This pair is synthetic and demonstrates the gates. Its result does not measure
197
+ your application's performance.
198
+
199
+ Record your agent on a task and export `runs/baseline.json`. Make your change, run
200
+ the same task again, and export `runs/candidate.json`. Then compare the files:
201
+
202
+ ```bash
203
+ agentloop replay --baseline runs/baseline.json --candidate runs/candidate.json --min-latency-improvement-pct 10
204
+ ```
205
+
206
+ This gate requires at least a 10% latency improvement. The report also compares
207
+ tokens, costs, retries, and call counts. It writes `runs/replay_report.md` and exits
208
+ nonzero when a required gate fails. `replay` evaluates saved evidence; your
209
+ application supplies both runs.
210
+
211
+ Use representative tasks and repeated runs before drawing broader conclusions.
212
+ For experiments across tasks and conditions, see [paired studies](docs/STUDIES.md)
213
+ and the [research guide](docs/RESEARCH.md). The
214
+ [intervention ledger](docs/INTERVENTIONS.md) links predictions to measured results.
215
+
216
+ ### Quality gates
217
+
218
+ A faster run still needs to meet its task requirements. For the local tracing
219
+ example, save this as `fixtures.json`:
220
+
221
+ ```json
222
+ {
223
+ "fixtures": [
224
+ {
225
+ "id": "notes_present",
226
+ "scorer": {"type": "required_fields", "required": ["notes"]}
227
+ }
228
+ ]
229
+ }
230
+ ```
231
+
232
+ ```bash
233
+ agentloop quality-report fixtures.json --candidate runs/research_agent.json
234
+ ```
235
+
236
+ This checks that the recorded output has a nonempty `notes` field. Choose checks
237
+ that express correctness for your own task. Fixtures can supply outputs directly
238
+ or read `metadata.output`; the last model call's output text is another supported
239
+ source when captured.
240
+
241
+ Built-in scorers include `exact_match`, `contains`, bounded `glob`, `required_fields`,
242
+ and `json_subset`. [Structured quality fixtures](docs/STRUCTURED_QUALITY.md) cover
243
+ classification, routing, extraction, and other decision outputs. A `custom` scorer
244
+ executes a trusted local Python function; the HTTP API rejects custom scorers.
245
+ See [scorer migration notes](docs/UPGRADING.md#quality-scorer-names) for renamed checks.
246
+
247
+ Once you have both runs, use your fixtures in a CI gate:
248
+
249
+ ```bash
250
+ agentloop ci --baseline runs/baseline.json --candidate runs/candidate.json --quality-fixtures fixtures.json
251
+ ```
252
+
253
+ Every candidate case must pass. Optional `--min-quality-score` thresholds also
254
+ apply to the average score. Invalid fixture suites fail closed. `ci` writes a
255
+ Markdown report and exits nonzero when a required gate fails. See
256
+ [CI setup](docs/CI.md) for comparing your application's artifacts in pull requests.
257
+
258
+ ## Understand the results
259
+
260
+ | Result | Interpretation |
261
+ | --- | --- |
262
+ | Runtime | `total_runtime_ms` is elapsed time. `cumulative_span_time_ms` sums spans and can be larger when calls overlap or nest. |
263
+ | Tokens | Counts retain their source: provider, tokenizer, user code, or a word-count estimate. Missing usage is marked unavailable. |
264
+ | Model costs | Estimates use token counts and configured prices. Unknown prices or estimated usage limit cost comparisons. |
265
+ | Optimization savings | Uncalibrated predictions, with recorded formulas and assumptions. Confirm them with candidate runs. |
266
+ | Quality scores | Results of the checks you supplied; their coverage depends on your fixtures. |
267
+
268
+ Cost gates can be `indeterminate` when pricing or usable usage is missing. This
269
+ does not fail the default cost gate; a positive `--min-cost-improvement-pct`
270
+ requires verifiable improvement. See [pricing](docs/PRICING.md) and
271
+ [trace compatibility](docs/TRACE_SCHEMA.md).
272
+
273
+ Rule failures remain visible and mark analysis incomplete. CI requires complete
274
+ analysis before recommending a merge. Keep your Markdown renderer's safe mode or
275
+ HTML sanitizer enabled when viewing reports from untrusted traces.
276
+
277
+ ### Files and exit codes
278
+
279
+ Use separate filenames for source traces, quality fixtures, and each report format.
280
+ The analysis and report commands reject paths that would replace source evidence
281
+ or make outputs overwrite each other, including aliases through filesystem links.
282
+ You can rerun a command to replace an existing report at its own output path.
283
+
284
+ `replay`, `quality-report`, and `ci` exit with code `1` when configured checks fail.
285
+ Invalid command arguments exit with code `2`. `analyze` produces a report for
286
+ inspection, including failed comparison checks; use `replay` or `ci` to enforce a
287
+ gate. Run `agentloop COMMAND --help` to see its output options and thresholds.
288
+
289
+ ## Framework integrations
290
+
291
+ | Source | Integration path |
292
+ | --- | --- |
293
+ | Custom Python agents and pipelines | Decorators, context managers, and [workflow annotations](docs/WORKFLOW_TRACING.md). |
294
+ | OpenAI SDK | Wrap a client or callable to capture calls, streams, and reported usage. |
295
+ | OpenAI Agents SDK | Attach an AgentLoop tracing processor. |
296
+ | LangGraph | Instrument the builder before adding nodes, then wrap the compiled runnable. |
297
+ | CrewAI | Wrap crew, task, or agent execution methods. |
298
+ | OTLP, OpenInference, MCP, and Vercel AI telemetry | Import supported JSON telemetry into native traces. |
299
+ | Harbor and Omnigent | Import completed execution files with source receipts and explicit coverage gaps. |
300
+
301
+ Adapters are included in version 0.1.0. Install the framework's own SDK separately
302
+ when needed; `python -m pip install "agentloop-profiler[instrumentation]"` includes
303
+ the OpenAI Python SDK. Follow the [integration guide](docs/INTEGRATIONS.md) for
304
+ setup, supported behavior, and streaming lifecycle requirements.
305
+
306
+ [Hermes Agent tracing](docs/HERMES.md) is included in AgentLoop 0.1.1 and newer.
307
+ Export its dependency-free directory plugin with `agentloop hermes export-plugin`,
308
+ enable it in your Hermes profile, and analyze the native turn traces it writes.
309
+ Output capture is off by default; the tested host contract is Hermes 0.21.6.
310
+
311
+ For telemetry you already export, [onboarding](docs/ONBOARDING.md) validates capture
312
+ before analysis. The [interoperability guide](docs/INTEROPERABILITY_READINESS.md)
313
+ covers Harbor ATIF/jobs, Omnigent sessions, bounded OTLP JSONL, offline capability
314
+ probes, and cross-harness comparisons. These imports work without upstream
315
+ runtimes or credentials. For classifiers and decision pipelines, start with
316
+ [AI execution profiling](docs/AI_EXECUTION_PROFILING.md).
317
+
318
+ ## How AgentLoop fits your stack
319
+
320
+ Your application runs the agent and chooses its framework and models. AgentLoop
321
+ records instrumented calls, analyzes the resulting trace, and compares saved runs
322
+ with your performance thresholds and quality fixtures. You choose and apply the
323
+ code changes.
324
+
325
+ <details>
326
+ <summary>View the workflow diagrams</summary>
327
+
328
+ <picture>
329
+ <source media="(max-width: 600px)" srcset="docs/assets/workflow-comparison-mobile.svg">
330
+ <source media="(prefers-reduced-motion: reduce)" srcset="docs/assets/workflow-comparison.svg">
331
+ <img src="docs/assets/workflow-comparison.gif" width="100%" alt="Without AgentLoop, application-specific timers, usage parsing, retry analysis, and output checks produce separate reports. AgentLoop combines captured execution evidence into tracing, analysis, and replay reports.">
332
+ </picture>
333
+
334
+ <picture>
335
+ <source media="(max-width: 600px)" srcset="docs/assets/framework-comparison-mobile.svg">
336
+ <source media="(prefers-reduced-motion: reduce)" srcset="docs/assets/framework-comparison.svg">
337
+ <img src="docs/assets/framework-comparison.gif" width="100%" alt="Your application executes models and tools. Decorators and adapters export trace JSON. Analyze produces metrics and findings; replay compares the baseline and candidate with your quality fixtures.">
338
+ </picture>
339
+
340
+ </details>
341
+
342
+ ## Dashboard and persistence
343
+
344
+ From a [source checkout](#source-checkout), load the synthetic example and start
345
+ the dashboard:
346
+
347
+ ```bash
348
+ uv run --frozen --all-extras agentloop quickstart
349
+ uv run --frozen --all-extras agentloop store-trace --path runs/agentloop_quickstart.json --project-id default
350
+ uv run --frozen --all-extras streamlit run dashboard/app.py
351
+ ```
352
+
353
+ Open Streamlit's printed URL and leave the sidebar's Project field set to `default`.
354
+ Use `store-trace` to load your own files. Storage uses SQLite by default and also
355
+ supports Postgres. The optional HTTP API serves project-scoped traces and reports
356
+ through `/v1` endpoints.
357
+
358
+ See [dashboard setup](docs/DASHBOARD.md), [API versioning](docs/API_VERSIONING.md),
359
+ and [production deployment](docs/PRODUCTION.md) for configuration and authentication.
360
+
361
+ ## Other installation options
362
+
363
+ ### Source checkout
364
+
365
+ Use a checkout for the examples, dashboard source, or changes since the latest
366
+ release. Install [uv](https://docs.astral.sh/uv/getting-started/installation/), then:
367
+
368
+ ```bash
369
+ git clone https://github.com/dipeshbabu/agentloop.git
370
+ cd agentloop
371
+ uv sync --locked --all-extras
372
+ uv run --frozen --all-extras agentloop quickstart
373
+ ```
374
+
375
+ ### Standalone CLI
376
+
377
+ [GitHub Releases](https://github.com/dipeshbabu/agentloop/releases) provides
378
+ executables for Linux x86-64, Windows x86-64, macOS Intel, and macOS Apple silicon.
379
+ They bundle Python and the core CLI. Use the Python package for SDK instrumentation,
380
+ the dashboard, API server, or Postgres support. Substitute the downloaded executable
381
+ where the examples show `agentloop`.
382
+
383
+ <details>
384
+ <summary>Download and verify a standalone executable</summary>
385
+
386
+ Download the executable and `SHA256SUMS` from the same release. These examples use
387
+ version 0.1.1; change the version when choosing another release.
388
+
389
+ Linux (Bash):
390
+
391
+ ```bash
392
+ set -euo pipefail
393
+ version=0.1.1
394
+ asset="agentloop-v${version}-linux-x86_64"
395
+ curl --fail --location --remote-name "https://github.com/dipeshbabu/agentloop/releases/download/v${version}/${asset}"
396
+ curl --fail --location --remote-name "https://github.com/dipeshbabu/agentloop/releases/download/v${version}/SHA256SUMS"
397
+ mapfile -t checksum_lines < <(awk -v asset="$asset" '$2 == asset { print }' SHA256SUMS)
398
+ if [ "${#checksum_lines[@]}" -ne 1 ]; then
399
+ echo "Expected exactly one checksum for ${asset}" >&2
400
+ exit 1
401
+ fi
402
+ printf '%s\n' "${checksum_lines[0]}" | sha256sum --check --strict
403
+ chmod +x "$asset"
404
+ ./"$asset" --help
405
+ ```
406
+
407
+ Windows PowerShell:
408
+
409
+ ```powershell
410
+ $Version = "0.1.1"
411
+ $Asset = "agentloop-v$Version-windows-x86_64.exe"
412
+ Invoke-WebRequest "https://github.com/dipeshbabu/agentloop/releases/download/v$Version/$Asset" -OutFile agentloop.exe
413
+ Invoke-WebRequest "https://github.com/dipeshbabu/agentloop/releases/download/v$Version/SHA256SUMS" -OutFile SHA256SUMS
414
+ $ChecksumLines = @(Get-Content SHA256SUMS | Where-Object {
415
+ $_ -match "^[0-9a-fA-F]{64} $([regex]::Escape($Asset))$"
416
+ })
417
+ if ($ChecksumLines.Count -ne 1) { throw "Expected exactly one checksum for $Asset" }
418
+ $ExpectedHash = ($ChecksumLines[0] -split " ", 2)[0]
419
+ $ActualHash = (Get-FileHash .\agentloop.exe -Algorithm SHA256).Hash
420
+ if ($ActualHash -ne $ExpectedHash) { throw "Checksum verification failed for $Asset" }
421
+ .\agentloop.exe --help
422
+ ```
423
+
424
+ Each release includes platform-specific third-party notices. macOS executables
425
+ are ad-hoc signed but not notarized; Gatekeeper may require approval on first launch.
426
+
427
+ </details>
428
+
429
+ ## Help and contributions
430
+
431
+ Run `agentloop --help` for all commands, or `agentloop COMMAND --help` for one command.
432
+ The [first-use guide](docs/FIRST_USE.md) walks through the analysis workflow.
433
+
434
+ - [Support](SUPPORT.md) and [issue forms](https://github.com/dipeshbabu/agentloop/issues/new/choose): questions, bugs, and feature requests.
435
+ - [Contributing](CONTRIBUTING.md): development setup and required checks.
436
+ - [Changelog](CHANGELOG.md), [upgrade guide](docs/UPGRADING.md), and [roadmap](docs/ROADMAP.md): releases, compatibility, and planned work.
437
+ - [Security](SECURITY.md): private vulnerability reports.
438
+ - [Governance](GOVERNANCE.md) and [Code of Conduct](CODE_OF_CONDUCT.md): project decisions and participation.
439
+
440
+ AgentLoop is under active pre-1.0 development. Pin a tagged release when you need
441
+ a fixed version, and check the changelog before upgrading.
442
+
443
+ ## License
444
+
445
+ Copyright 2026 Dipesh Tharu Mahato.
446
+
447
+ AgentLoop is licensed under the [Apache License 2.0](LICENSE). Dependencies retain
448
+ their own terms; see [THIRD_PARTY_LICENSES.md](THIRD_PARTY_LICENSES.md).