agent-trajectory-diff 0.5.0__tar.gz → 0.5.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 (51) hide show
  1. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/.gitignore +0 -14
  2. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/PKG-INFO +3 -3
  3. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/README.md +2 -2
  4. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/__init__.py +1 -1
  5. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/engine/loop_detector.py +19 -12
  6. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/LICENSE +0 -0
  7. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/pyproject.toml +0 -0
  8. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/__main__.py +0 -0
  9. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/adapters/__init__.py +0 -0
  10. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/adapters/_iso.py +0 -0
  11. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/adapters/_messages.py +0 -0
  12. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/adapters/base.py +0 -0
  13. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/adapters/crewai.py +0 -0
  14. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/adapters/generic.py +0 -0
  15. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/adapters/langfuse.py +0 -0
  16. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/adapters/langgraph.py +0 -0
  17. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/adapters/langsmith.py +0 -0
  18. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/adapters/openai_agents.py +0 -0
  19. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/adapters/openinference.py +0 -0
  20. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/adapters/registry.py +0 -0
  21. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/ci/approve.py +0 -0
  22. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/ci/baseline.py +0 -0
  23. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/ci/github.py +0 -0
  24. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/cli.py +0 -0
  25. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/config.py +0 -0
  26. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/engine/__init__.py +0 -0
  27. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/engine/aligner.py +0 -0
  28. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/engine/benchmark.py +0 -0
  29. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/engine/comparator.py +0 -0
  30. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/engine/explanations.py +0 -0
  31. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/engine/metrics.py +0 -0
  32. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/engine/suite.py +0 -0
  33. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/engine/tree.py +0 -0
  34. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/governance.py +0 -0
  35. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/init_wizard.py +0 -0
  36. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/loader.py +0 -0
  37. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/models/__init__.py +0 -0
  38. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/models/envelope.py +0 -0
  39. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/models/report.py +0 -0
  40. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/models/step.py +0 -0
  41. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/models/trace.py +0 -0
  42. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/py.typed +0 -0
  43. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/pytest_plugin.py +0 -0
  44. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/recorder.py +0 -0
  45. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/reporters/__init__.py +0 -0
  46. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/reporters/markdown.py +0 -0
  47. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/reporters/pr.py +0 -0
  48. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/reporters/terminal.py +0 -0
  49. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/staleness.py +0 -0
  50. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/testing/__init__.py +0 -0
  51. {agent_trajectory_diff-0.5.0 → agent_trajectory_diff-0.5.1}/src/agentdiff/testing/assertions.py +0 -0
@@ -65,20 +65,6 @@ coverage.xml
65
65
  *.cover
66
66
  *.log
67
67
 
68
- # 6. Next.js / Website (Node.js & pnpm)
69
- website/node_modules/
70
- website/.next/
71
- website/out/
72
- website/build/
73
- website/npm-debug.log*
74
- website/yarn-debug.log*
75
- website/yarn-error.log*
76
- website/pnpm-debug.log*
77
- website/.env*.local
78
- website/.env.local
79
- website/.env.development.local
80
- website/.env.test.local
81
- website/.env.production.local
82
68
 
83
69
  # pytest-benchmark local results
84
70
  .benchmarks/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: agent-trajectory-diff
3
- Version: 0.5.0
3
+ Version: 0.5.1
4
4
  Summary: A developer-first package to evaluate and find regressions in agent trajectories
5
5
  Project-URL: Homepage, https://github.com/kerrshift/agentdiff
6
6
  Project-URL: Repository, https://github.com/kerrshift/agentdiff
@@ -219,8 +219,8 @@ make test
219
219
  # Build package distributions
220
220
  make build
221
221
 
222
- # Launch the website & docs locally
223
- make website-dev
222
+ # Website & docs (separate repo, deploys agentdiff.app)
223
+ # → github.com/kerrshift/agentdiff-website
224
224
  ```
225
225
 
226
226
  ## License
@@ -199,8 +199,8 @@ make test
199
199
  # Build package distributions
200
200
  make build
201
201
 
202
- # Launch the website & docs locally
203
- make website-dev
202
+ # Website & docs (separate repo, deploys agentdiff.app)
203
+ # → github.com/kerrshift/agentdiff-website
204
204
  ```
205
205
 
206
206
  ## License
@@ -32,7 +32,7 @@ Typical flow::
32
32
  assert_no_regressions(report)
33
33
  """
34
34
 
35
- __version__ = "0.5.0"
35
+ __version__ = "0.5.1"
36
36
 
37
37
  from agentdiff.adapters import (
38
38
  BaseAdapter,
@@ -24,8 +24,14 @@ def detect_graph_cycles(trace: AgentTrace) -> list[list[str]]:
24
24
  def detect_sequence_loops(trace: AgentTrace) -> list[dict[str, Any]]:
25
25
  """Detects consecutive repeating sub-sequences of steps (e.g., A -> B -> A -> B).
26
26
 
27
- A loop is defined as a sequence of step names of length k repeating consecutively
28
- 2 or more times.
27
+ A loop is a sequence of step names of length k repeating consecutively 2 or
28
+ more times **with stagnant state**: the repeated steps must have identical
29
+ input payloads and outputs.
30
+
31
+ Repetition with *different* inputs is legitimate iteration (an agent
32
+ querying three states, paginating, or walking a list), so it is not a loop.
33
+ Runaway behaviour with drifting arguments is covered by the tool-repeat cap
34
+ (``max_tool_repeats``) and by the resource bands, not by this detector.
29
35
  """
30
36
  steps = sorted(trace.steps, key=lambda s: s.step_index)
31
37
  names = [s.name for s in steps]
@@ -68,16 +74,17 @@ def detect_sequence_loops(trace: AgentTrace) -> list[dict[str, Any]]:
68
74
  if not stagnant:
69
75
  break
70
76
 
71
- loops.append(
72
- {
73
- "steps": pattern,
74
- "step_ids": loop_step_ids,
75
- "iterations": count,
76
- "start_index": i,
77
- "length": k,
78
- "stagnant": stagnant,
79
- }
80
- )
77
+ if stagnant:
78
+ loops.append(
79
+ {
80
+ "steps": pattern,
81
+ "step_ids": loop_step_ids,
82
+ "iterations": count,
83
+ "start_index": i,
84
+ "length": k,
85
+ "stagnant": stagnant,
86
+ }
87
+ )
81
88
 
82
89
  # Advance pointer past the repeated patterns
83
90
  i += count * k