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.
- agentloop_profiler-0.1.1/PKG-INFO +448 -0
- agentloop_profiler-0.1.1/README.md +390 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/autoinstrument.py +13 -2
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/cli.py +55 -17
- agentloop_profiler-0.1.1/agentloop/cli_paths.py +47 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/client.py +87 -18
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/entrypoint.py +6 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/events.py +5 -1
- agentloop_profiler-0.1.1/agentloop/integrations/hermes.py +78 -0
- agentloop_profiler-0.1.1/agentloop/integrations/hermes_cli.py +23 -0
- agentloop_profiler-0.1.1/agentloop/integrations/hermes_recorder.py +532 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/sdk.py +7 -1
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/quality.py +2 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/tracer.py +8 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/version.py +1 -1
- agentloop_profiler-0.1.1/agentloop_profiler.egg-info/PKG-INFO +448 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop_profiler.egg-info/SOURCES.txt +8 -0
- agentloop_profiler-0.1.1/agentloop_profiler.egg-info/entry_points.txt +5 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop_profiler.egg-info/requires.txt +9 -2
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/pyproject.toml +43 -9
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_api_versioning.py +2 -2
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_bump_version.py +91 -1
- agentloop_profiler-0.1.1/tests/test_cli_output_paths.py +299 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_client.py +2 -2
- agentloop_profiler-0.1.1/tests/test_client_transport.py +123 -0
- agentloop_profiler-0.1.1/tests/test_distribution_metadata.py +97 -0
- agentloop_profiler-0.1.1/tests/test_hermes_integration.py +487 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_python_support.py +3 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_release_workflows.py +4 -3
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_repository_policy_traversal.py +19 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_streamlit_compat.py +4 -2
- agentloop_profiler-0.1.1/tests/test_trace_failure_recording.py +45 -0
- agentloop_profiler-0.1.0/PKG-INFO +0 -513
- agentloop_profiler-0.1.0/README.md +0 -462
- agentloop_profiler-0.1.0/agentloop_profiler.egg-info/PKG-INFO +0 -513
- agentloop_profiler-0.1.0/agentloop_profiler.egg-info/entry_points.txt +0 -2
- agentloop_profiler-0.1.0/tests/test_distribution_metadata.py +0 -41
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/LICENSE +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/THIRD_PARTY_LICENSES.md +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/__init__.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/ablation_protocol.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/ablations.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/aggregate_cli.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/aggregate_stats.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/aggregates.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/audit.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/batch_experiments.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/batching.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/budget_types.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/budgets.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/calibration.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/checkpoint_state.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/checkpoint_store.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/ci.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/completion.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/completion_types.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/config.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/context_controls.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/context_experiments.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/context_types.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/costs.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/cursor_validation.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/decorators.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/demo.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/doctor.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/drift.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/drift_cli.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/drift_types.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/drift_windows.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/estimates.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/experiment_artifacts.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/experiment_observations.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/experiment_reports.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/experiment_types.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/experiments.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/exporters.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/finding_benchmark_types.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/finding_benchmarks.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/findings.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/graph.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/harness.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/harness_bench/__init__.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/harness_bench/cli.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/harness_bench/drivers.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/harness_bench/offline.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/harness_evidence.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/harness_usage.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/html_report.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/__init__.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/crewai.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/harbor/__init__.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/harbor/atif.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/harbor/atif_validation.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/harbor/cli.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/harbor/manifest.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/harbor/trial_evidence.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/harbor/trials.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/harbor/verifier.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/langgraph.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/langgraph_harness.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/langgraph_recovery.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/omnigent/__init__.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/omnigent/cli.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/omnigent/evidence.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/omnigent/telemetry.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/openai.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/openai_agents.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/integrations/vercel_ai.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/interoperability/__init__.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/interoperability/artifacts.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/interoperability/cli.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/interoperability/cohort_evidence.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/interoperability/cohorts.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/interoperability/contracts.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/interoperability/coordination.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/interoperability/evidence.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/interoperability/otlp_jsonl.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/interoperability/otlp_validation.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/interoperability/registry.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/interoperability/validation.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/intervention_service.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/intervention_store.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/interventions.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/issues.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/judgment_adapters.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/judgment_benchmark_types.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/judgment_benchmarks.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/judgment_types.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/judgment_views.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/judgments.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/loop_guards.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/loop_types.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/markdown.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/metrics.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/migrations.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/model_routing.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/onboarding.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/operations.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/optimizer.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/otel.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/otel_ids.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/otel_semantics.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/parallelism.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/patches.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/plan_export.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/policy_promotion.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/promotion_evidence.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/promotion_types.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/ranking.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/recovery_evidence.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/replay.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/retention.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/retention_types.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/reuse_experiments.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/routing_checks.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/routing_types.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/rules.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/runtime.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/savings.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/scheduling_plan.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/scheduling_types.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/schema.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/semantic_rules.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/semantic_waste.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/semantic_waste_types.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/server.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/store.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/structural_experiments.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/structural_types.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/structured_quality.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/studies.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/study_statistics.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/substitution_evidence.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/substitution_export.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/substitution_reports.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/substitution_types.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/substitutions.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/timing.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/tokens.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/tool_scheduling.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/trace_sources.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/value.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/workflow_types.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop/workflows.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop_profiler.egg-info/dependency_links.txt +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/agentloop_profiler.egg-info/top_level.txt +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/dashboard/__init__.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/dashboard/app.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/dashboard/streamlit_compat.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/dashboard/trace_upload.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/dashboard/value_view.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/setup.cfg +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_ablations.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_aggregates.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_batch_data_pipeline.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_budgets.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_calibration.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_capability_registry.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_checkpoint_recovery.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_ci_command.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_ci_evidence.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_cli_store_commands.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_cli_trace_inputs.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_completion.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_context_controls.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_context_reuse_experiments.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_context_study.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_costs.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_crewai_integration.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_cursor_server.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_cursor_shape_validation.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_dashboard_input_validation.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_dashboard_quality.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_dashboard_semantic_waste.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_dashboard_structured_quality.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_dashboard_trace_upload.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_dashboard_value_view.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_dashboard_workflows.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_decorators.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_demo_cli.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_dependabot_config.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_diagnosis_api.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_doctor_autoinstrument.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_drift.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_email_workflow.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_empirical_calibration.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_enforcement_conformance.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_estimates.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_evidence_workflow.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_experiments.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_exporters.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_external_cohorts.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_finding_benchmarks.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_finding_identity.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_finding_rules.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_first_use_cli.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_graph.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_harbor_atif.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_harbor_trials.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_harness.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_harness_bench.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_harness_error_usage.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_harness_evidence.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_html_report.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_incident_triage.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_integration_conformance.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_interoperability_contracts.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_interventions.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_issues.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_judgment_adapters.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_judgment_benchmarks.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_judgment_evidence.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_judgment_provider_optional.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_judgments.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_langgraph_conformance.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_langgraph_harness.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_langgraph_integration.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_langgraph_recovery.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_loop_guards.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_markdown.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_markdown_exporters.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_marketplace_workflow.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_metrics.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_migrations.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_model_batching.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_model_routing.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_multiagent_coordination.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_non_agent_study.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_omnigent_telemetry.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_onboarding.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_openai_agents_integration.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_openai_integration.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_operations.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_optimizer.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_otel_ids.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_otel_interop.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_otlp_jsonl.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_parallelization_evidence.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_patch_plan.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_payment_review.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_policy_promotion.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_quality.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_ranking.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_real_agent_study.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_real_calibration_study.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_real_harness_study.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_remote_cli_credentials.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_replay.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_research_example.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_retention.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_routing_study.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_rule_error_privacy.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_runtime.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_savings_aggregation.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_scheduling_study.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_semantic_findings.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_semantic_waste.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_server.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_standalone_notices.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_store.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_store_contract.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_streaming_inventory.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_structural_experiments.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_structured_quality.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_structured_quality_evidence.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_studies.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_substitutions.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_telemetry_conformance.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_timing.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_token_provenance.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_tool_scheduling.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_trace_context.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_trace_schema.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_usefulness_benchmark.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_value.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_vercel_ai_integration.py +0 -0
- {agentloop_profiler-0.1.0 → agentloop_profiler-0.1.1}/tests/test_workflow_storage.py +0 -0
- {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).
|