agentdebugx 0.5.1__tar.gz → 0.5.2__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 (331) hide show
  1. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/PKG-INFO +1 -1
  2. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/pyproject.toml +1 -1
  3. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/__init__.py +1 -1
  4. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/evidence.py +166 -76
  5. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/LICENSE +0 -0
  6. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/README.md +0 -0
  7. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/ARCHITECTURE.md +0 -0
  8. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/GUI_RCA_COMMANDS.md +0 -0
  9. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/TRACE_SCHEMA.md +0 -0
  10. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/assets/UI.png +0 -0
  11. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/assets/logo-dark.svg +0 -0
  12. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/assets/logo.png +0 -0
  13. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/assets/logo.svg +0 -0
  14. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/assets/overview.pdf +0 -0
  15. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/assets/overview.png +0 -0
  16. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/assets/stylesheets/extra.css +0 -0
  17. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/concepts/workflow.md +0 -0
  18. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/getting-started/installation.md +0 -0
  19. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/getting-started/quickstart.md +0 -0
  20. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/guides/diagnose.md +0 -0
  21. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/guides/gui-rca.md +0 -0
  22. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/guides/ingest.md +0 -0
  23. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/guides/local-ui.md +0 -0
  24. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/guides/rerun.md +0 -0
  25. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/help/build-docs.md +0 -0
  26. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/help/troubleshooting.md +0 -0
  27. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/index.md +0 -0
  28. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/reference/cli.md +0 -0
  29. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/reference/diagnostic-report.md +0 -0
  30. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/reference/python-api.md +0 -0
  31. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/taxonomy_manifest.md +0 -0
  32. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/batch/README.md +0 -0
  33. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/batch/__init__.py +0 -0
  34. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/batch/workflow.py +0 -0
  35. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/README.md +0 -0
  36. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/__init__.py +0 -0
  37. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/config.py +0 -0
  38. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/context.py +0 -0
  39. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/contracts.py +0 -0
  40. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/filtering.py +0 -0
  41. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/hosts/CODEX_SUPPORT.md +0 -0
  42. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/hosts/README.md +0 -0
  43. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/hosts/__init__.py +0 -0
  44. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/hosts/base.py +0 -0
  45. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/hosts/claude_code.py +0 -0
  46. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/hosts/codex.py +0 -0
  47. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/hosts/registry.py +0 -0
  48. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/identity.py +0 -0
  49. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/repository.py +0 -0
  50. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/service.py +0 -0
  51. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/snapshot.py +0 -0
  52. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/README.md +0 -0
  53. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/__init__.py +0 -0
  54. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/__main__.py +0 -0
  55. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/commands/__init__.py +0 -0
  56. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/commands/batch.py +0 -0
  57. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/commands/capture.py +0 -0
  58. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/commands/config.py +0 -0
  59. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/commands/diagnose.py +0 -0
  60. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/commands/doctor.py +0 -0
  61. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/commands/hub.py +0 -0
  62. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/commands/ingest.py +0 -0
  63. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/commands/integrations.py +0 -0
  64. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/commands/rerun.py +0 -0
  65. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/commands/run.py +0 -0
  66. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/commands/runner.py +0 -0
  67. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/commands/serve.py +0 -0
  68. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/commands/store.py +0 -0
  69. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/commands/ui.py +0 -0
  70. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/legacy.py +0 -0
  71. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/main.py +0 -0
  72. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/core/__init__.py +0 -0
  73. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/core/events.py +0 -0
  74. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/core/gui_taxonomy.py +0 -0
  75. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/core/llm.py +0 -0
  76. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/core/llm_channel.py +0 -0
  77. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/core/models.py +0 -0
  78. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/core/plugins/__init__.py +0 -0
  79. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/core/plugins/registry.py +0 -0
  80. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/core/plugins/types.py +0 -0
  81. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/core/storage.py +0 -0
  82. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/core/taxonomy.py +0 -0
  83. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/README.md +0 -0
  84. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/__init__.py +0 -0
  85. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/actions/__init__.py +0 -0
  86. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/actions/attribution.py +0 -0
  87. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/actions/hub/__init__.py +0 -0
  88. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/actions/hub/backend_base.py +0 -0
  89. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/actions/hub/backends.py +0 -0
  90. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/actions/hub/bundle.py +0 -0
  91. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/actions/hub/scrub.py +0 -0
  92. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/actions/integrations/__init__.py +0 -0
  93. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/actions/integrations/_templates.py +0 -0
  94. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/actions/integrations/claude_skill.py +0 -0
  95. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/actions/integrations/debug_skill.py +0 -0
  96. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/actions/integrations/openhands.py +0 -0
  97. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/actions/moe.py +0 -0
  98. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/actions/recovery.py +0 -0
  99. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/analyzers.py +0 -0
  100. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/attribute/README.md +0 -0
  101. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/attribute/__init__.py +0 -0
  102. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/attribute/async_api.py +0 -0
  103. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/attribute/attribution.py +0 -0
  104. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/attribute/deep_memory.py +0 -0
  105. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/attribute/deepdebug.py +0 -0
  106. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/attribute/moe.py +0 -0
  107. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/attribute/reference.py +0 -0
  108. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/attribute/trajdebug.py +0 -0
  109. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/__init__.py +0 -0
  110. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/attribute/__init__.py +0 -0
  111. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/attribute/all_at_once.json +0 -0
  112. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/attribute/binary_search.json +0 -0
  113. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/attribute/counterfactual.json +0 -0
  114. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/attribute/deepdebug.json +0 -0
  115. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/attribute/heuristic.json +0 -0
  116. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/attribute/step_by_step.json +0 -0
  117. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/attribute/trajdebug.json +0 -0
  118. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/detect/__init__.py +0 -0
  119. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/detect/heuristic.json +0 -0
  120. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/detect/llm_judge.json +0 -0
  121. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/detect/perstep.json +0 -0
  122. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/detect/stage_a.json +0 -0
  123. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/detect/trajdebug.json +0 -0
  124. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/recover/__init__.py +0 -0
  125. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/recover/auto_manual.json +0 -0
  126. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/recover/critic.json +0 -0
  127. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/recover/deepdebug.json +0 -0
  128. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/recover/reflexion.json +0 -0
  129. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/recover/saga_rollback.json +0 -0
  130. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/recover/self_refine.json +0 -0
  131. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/context.py +0 -0
  132. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/deep.py +0 -0
  133. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/deep_memory.py +0 -0
  134. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/README.md +0 -0
  135. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/__init__.py +0 -0
  136. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/analyzers.py +0 -0
  137. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/compression.py +0 -0
  138. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/detectors.py +0 -0
  139. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/judge.py +0 -0
  140. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/perstep.py +0 -0
  141. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules/__init__.py +0 -0
  142. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules/agenterrorbench.py +0 -0
  143. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules/base.py +0 -0
  144. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules/core.py +0 -0
  145. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules/gui.py +0 -0
  146. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules/packs/__init__.py +0 -0
  147. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules/packs/agenterrorbench/__init__.py +0 -0
  148. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules/packs/agenterrorbench/manifest.json +0 -0
  149. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules/packs/agenterrorbench/rules.py +0 -0
  150. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules/packs/core/__init__.py +0 -0
  151. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules/packs/core/manifest.json +0 -0
  152. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules/packs/core/rules.py +0 -0
  153. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules/packs/gui/__init__.py +0 -0
  154. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules/packs/gui/manifest.json +0 -0
  155. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules/packs/gui/rules.py +0 -0
  156. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules/registry.py +0 -0
  157. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules.py +0 -0
  158. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/selection.py +0 -0
  159. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/taxonomy_induction.py +0 -0
  160. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/trajdebug.py +0 -0
  161. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detectors.py +0 -0
  162. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/deterministic.py +0 -0
  163. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/gui_rca.py +0 -0
  164. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/judge.py +0 -0
  165. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/judges.py +0 -0
  166. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/pipeline.py +0 -0
  167. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/profiles/README.md +0 -0
  168. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/profiles/__init__.py +0 -0
  169. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/profiles/deepdebug.py +0 -0
  170. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/recover/README.md +0 -0
  171. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/recover/__init__.py +0 -0
  172. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/recover/recovery.py +0 -0
  173. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/registry.py +0 -0
  174. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/rules/__init__.py +0 -0
  175. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/rules/agenterrorbench.py +0 -0
  176. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/rules/base.py +0 -0
  177. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/rules/core.py +0 -0
  178. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/rules/gui.py +0 -0
  179. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/rules/registry.py +0 -0
  180. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/taxonomy_induction.py +0 -0
  181. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/__init__.py +0 -0
  182. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/__main__.py +0 -0
  183. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/agent.py +0 -0
  184. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/config/debugger.example.json +0 -0
  185. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/config.py +0 -0
  186. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/discuss.py +0 -0
  187. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/dispatch.py +0 -0
  188. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/eval/__init__.py +0 -0
  189. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/eval/accuracy.py +0 -0
  190. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/evolving/__init__.py +0 -0
  191. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/evolving/alignment.py +0 -0
  192. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/evolving/case_loader.py +0 -0
  193. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/evolving/prompts.py +0 -0
  194. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/evolving/protocol.py +0 -0
  195. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/evolving/runner.py +0 -0
  196. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/evolving/state.py +0 -0
  197. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/evolving/tools.py +0 -0
  198. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/ingester.py +0 -0
  199. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/memory/__init__.py +0 -0
  200. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/memory/annotation_loader.py +0 -0
  201. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/memory/distill.py +0 -0
  202. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/memory/episode_memory.py +0 -0
  203. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/memory/intention.py +0 -0
  204. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/memory/lesson_injector.py +0 -0
  205. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/memory/lesson_memory.py +0 -0
  206. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/memory/semantic_merge.py +0 -0
  207. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/openai_adapter.py +0 -0
  208. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/output.py +0 -0
  209. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/perplexity_adapter.py +0 -0
  210. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/pipeline/__init__.py +0 -0
  211. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/pipeline/classify.py +0 -0
  212. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/pipeline/client_factory.py +0 -0
  213. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/pipeline/orchestrator.py +0 -0
  214. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/pipeline/results.py +0 -0
  215. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/pipeline/runtime.py +0 -0
  216. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/pipeline/worker.py +0 -0
  217. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/prompts.py +0 -0
  218. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/prompts_discuss.py +0 -0
  219. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/rca.py +0 -0
  220. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/scripts/__init__.py +0 -0
  221. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/scripts/download_input_trajectory.py +0 -0
  222. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/tagger.py +0 -0
  223. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/taxonomy.py +0 -0
  224. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/together_adapter.py +0 -0
  225. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/tools/__init__.py +0 -0
  226. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/tools/lesson_explorer.py +0 -0
  227. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/trajectory.py +0 -0
  228. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/trajectory_normalizer.py +0 -0
  229. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/utils/__init__.py +0 -0
  230. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/utils/lock.py +0 -0
  231. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/utils/logger.py +0 -0
  232. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/vis/__init__.py +0 -0
  233. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/vis/debugger_app.py +0 -0
  234. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/vis/generate_assignments.py +0 -0
  235. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/hub/README.md +0 -0
  236. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/hub/__init__.py +0 -0
  237. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/hub/backend_base.py +0 -0
  238. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/hub/backends.py +0 -0
  239. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/hub/bundle.py +0 -0
  240. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/hub/scrub.py +0 -0
  241. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/README.md +0 -0
  242. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/__init__.py +0 -0
  243. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/adapters/__init__.py +0 -0
  244. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/adapters/base.py +0 -0
  245. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/adapters/crewai.py +0 -0
  246. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/adapters/gaia_odr.py +0 -0
  247. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/adapters/importers.py +0 -0
  248. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/adapters/langgraph.py +0 -0
  249. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/adapters/openai_agents.py +0 -0
  250. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/adapters/osworld.py +0 -0
  251. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/adapters/otel.py +0 -0
  252. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/adapters/raw.py +0 -0
  253. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/adapters/trajdebug.py +0 -0
  254. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/core/__init__.py +0 -0
  255. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/importers.py +0 -0
  256. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/instrumentation.py +0 -0
  257. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/native_protocol.py +0 -0
  258. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/recorder.py +0 -0
  259. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/README.md +0 -0
  260. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/__init__.py +0 -0
  261. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/discussion.py +0 -0
  262. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/traceback.py +0 -0
  263. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/ui/__init__.py +0 -0
  264. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/ui/app.py +0 -0
  265. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/ui/assets/robot-avatar.svg +0 -0
  266. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/ui/branch_store.py +0 -0
  267. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/ui/discussion_store.py +0 -0
  268. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/ui/llm_convert.py +0 -0
  269. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/ui/manager.py +0 -0
  270. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/ui/mcp_rerun.py +0 -0
  271. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/ui/routes.py +0 -0
  272. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/ui/server.py +0 -0
  273. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/ui/services.py +0 -0
  274. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/ui/upload.py +0 -0
  275. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/ui/views.py +0 -0
  276. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/integrations/README.md +0 -0
  277. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/integrations/__init__.py +0 -0
  278. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/integrations/_templates.py +0 -0
  279. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/integrations/agentdebug_skill/SKILL.md +0 -0
  280. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/integrations/agentdebug_skill/references/analysis.md +0 -0
  281. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/integrations/agentdebug_skill/references/cli_reference.md +0 -0
  282. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/integrations/agentdebug_skill/references/formats.md +0 -0
  283. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/integrations/agentdebug_skill/references/recovery.md +0 -0
  284. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/integrations/agentdebug_skill/references/safety.md +0 -0
  285. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/integrations/agentdebug_skill/references/setup.md +0 -0
  286. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/integrations/capture_management.py +0 -0
  287. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/integrations/claude_skill.py +0 -0
  288. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/integrations/codex_skill.py +0 -0
  289. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/integrations/debug_skill.py +0 -0
  290. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/integrations/management.py +0 -0
  291. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/integrations/openhands.py +0 -0
  292. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/provenance.py +0 -0
  293. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/py.typed +0 -0
  294. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/ACTOR_TASK_SPEC.md +0 -0
  295. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/README.md +0 -0
  296. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/RUNNER_SPEC.md +0 -0
  297. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/SIMULATION_SPEC.md +0 -0
  298. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/__init__.py +0 -0
  299. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/actor_task.py +0 -0
  300. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/branch.py +0 -0
  301. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/evaluators.py +0 -0
  302. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/executors/__init__.py +0 -0
  303. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/executors/base.py +0 -0
  304. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/executors/http_live.py +0 -0
  305. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/executors/llm_continuation.py +0 -0
  306. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/executors/process_live.py +0 -0
  307. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/http_service.py +0 -0
  308. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/live_validation.py +0 -0
  309. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/request.py +0 -0
  310. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/workflow.py +0 -0
  311. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/runtime/README.md +0 -0
  312. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/runtime/__init__.py +0 -0
  313. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/runtime/events.py +0 -0
  314. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/runtime/gui_taxonomy.py +0 -0
  315. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/runtime/llm.py +0 -0
  316. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/runtime/llm_channel.py +0 -0
  317. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/runtime/plugins/__init__.py +0 -0
  318. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/runtime/plugins/registry.py +0 -0
  319. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/runtime/plugins/types.py +0 -0
  320. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/runtime/storage.py +0 -0
  321. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/schema/README.md +0 -0
  322. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/schema/__init__.py +0 -0
  323. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/schema/models.py +0 -0
  324. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/schema/taxonomy.py +0 -0
  325. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/taxonomy_manifest.py +0 -0
  326. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/workbench/README.md +0 -0
  327. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/workbench/__init__.py +0 -0
  328. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/workbench/models.py +0 -0
  329. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/workbench/profiles.py +0 -0
  330. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/workbench/registry.py +0 -0
  331. {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/workbench/service.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentdebugx
3
- Version: 0.5.1
3
+ Version: 0.5.2
4
4
  Summary: Portable error analysis, tracing, and recovery framework for agentic AI systems. Import as `agentdebug`.
5
5
  License: MIT
6
6
  License-File: LICENSE
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "agentdebugx"
3
- version = "0.5.1"
3
+ version = "0.5.2"
4
4
  description = "Portable error analysis, tracing, and recovery framework for agentic AI systems. Import as `agentdebug`."
5
5
  authors = ["ULab @ UIUC <ulab@illinois.edu>"]
6
6
  license = "MIT"
@@ -291,7 +291,7 @@ __all__ = [
291
291
  'write_converted_trajectory',
292
292
  ]
293
293
 
294
- __version__ = '0.5.1'
294
+ __version__ = '0.5.2'
295
295
 
296
296
  _COMPAT_MODULE_ALIASES = {
297
297
  'agentdebug.models': _core_models_mod,
@@ -39,7 +39,17 @@ from __future__ import annotations
39
39
 
40
40
  import re
41
41
  from dataclasses import dataclass
42
- from typing import Any, Dict, Iterable, List, Mapping, Optional, Sequence, Tuple
42
+ from typing import (
43
+ Any,
44
+ Callable,
45
+ Dict,
46
+ Iterable,
47
+ List,
48
+ Mapping,
49
+ Optional,
50
+ Sequence,
51
+ Tuple,
52
+ )
43
53
 
44
54
  from agentdebug.schema import (
45
55
  AgentEvent,
@@ -341,7 +351,7 @@ def annotate_quote_verification(
341
351
  return annotated
342
352
 
343
353
 
344
- def quote_verification_summary(findings: Iterable[FailureFinding]) -> dict:
354
+ def quote_verification_summary(findings: Iterable[FailureFinding]) -> Dict[str, int]:
345
355
  """Counts by verification state, for reporting a detector's grounding rate.
346
356
 
347
357
  The ratio of ``verified`` to ``verified + unsupported`` is a measurable
@@ -384,8 +394,17 @@ def quote_verification_summary(findings: Iterable[FailureFinding]) -> dict:
384
394
  # of a real event are different defects with different fixes.
385
395
  #
386
396
  # Nothing below changes what :func:`verify_finding_quotes` accepts. The
387
- # ``normalized`` rung applies the same normalisation, so a quote that verifies
388
- # also locates; the extra information is *where*.
397
+ # ``normalized`` rung applies the same normalisation first, so a quote that
398
+ # verifies also locates; the extra information is *where*. It then goes one
399
+ # step wider than verification -- quotation marks are dropped on both sides
400
+ # (see :func:`_canon`) -- so a quote may locate without verifying. Measured on
401
+ # 1,500 evidence quotes from a consumer's debug corpus (AgentErrorData,
402
+ # ``scripts/evidence_region_vs_upstream.py``), 402 quotes the consumer's own
403
+ # rung ladder anchored were not grounded here; 337 of them differed from the
404
+ # stored field in nothing but a renderer's role label (``Observation: ...``,
405
+ # ``step 8 action: ...``) and 11 more in nothing but the kind of quotation
406
+ # mark, which is why both are treated as framing rather than content. After
407
+ # this change 54 remain, and those are real edits or two-field composites.
389
408
  # ---------------------------------------------------------------------------
390
409
 
391
410
  #: Rungs, strictest first. A quote is credited to the first rung that locates it.
@@ -393,7 +412,10 @@ def quote_verification_summary(findings: Iterable[FailureFinding]) -> dict:
393
412
  #: ``normalized`` -- substring after the normalisation ``verify_finding_quotes``
394
413
  #: applies (JSON escapes, whitespace, a trailing truncation marker) and after
395
414
  #: removing the framing a renderer puts around an event -- ``[step 3]``,
396
- #: ``event_id=evt_...``, ``output=`` -- which a model copying a line copies too.
415
+ #: ``event_id=evt_...``, ``output=``, ``Observation:`` -- which a model copying
416
+ #: a line copies too; failing that, with quotation marks dropped on both
417
+ #: sides, since a stored ``repr`` and a model's JSON re-quoting of it differ
418
+ #: in nothing else.
397
419
  #: ``anchored`` -- the text was found nowhere, but the quote (or the caller)
398
420
  #: named an event id that exists. A pointer, not a transcription.
399
421
  #: ``unresolvable`` -- neither the text nor an anchor places it.
@@ -427,20 +449,38 @@ ANCHOR_ELSEWHERE = 'elsewhere'
427
449
 
428
450
  _EVENT_FIELDS = ('input', 'output', 'error')
429
451
 
452
+ #: The label a renderer prints in front of an event's text (``Thought:``,
453
+ #: ``Action:``, ``Observation:``, ``Feedback:``), and the ones models add
454
+ #: themselves when reproducing a line (``env:``, ``error:``, ``solver:``,
455
+ #: ``verifier signal:``). A renderer that folds the error field into the
456
+ #: label -- ``Observation (tool error: unknown_carrier): Rejected.`` -- is
457
+ #: covered by the optional parenthetical. The label is framing; the text
458
+ #: after the colon must still match a stored field.
459
+ _ROLE_LABEL = (
460
+ r'(?:thought|action|observation|feedback|env|error|solver|signal|user|executor'
461
+ r'|verifier[ _]signal|verification|verifier)(?:\s*\([^)]*\))?\s*:'
462
+ )
463
+ #: The event-id forms the built-in renderers print (``event_id=evt_x``) and
464
+ #: the ones models write when asked to cite (``evt_x: ...``, ``(evt_x) ...``,
465
+ #: ``[evt_x][agent][kind] ...``).
466
+ _EVENT_REF = (
467
+ r'\[(?P<bracket>evt_\w+)\](?:\[[^\]]*\]){0,2}'
468
+ r'|\((?P<paren>evt_\w+)\)'
469
+ r'|event_id\s*=\s*(?P<kw>[^\s,;:]+)'
470
+ r'|(?P<colon>evt_\w+)\s*[:\-]'
471
+ )
430
472
  #: Framing a renderer puts around an event, or a model adds when reproducing a
431
473
  #: line. Anchored on the start of the quote, so only a leading frame is
432
- #: removed and the quoted content itself must still match. The event-id forms
433
- #: are the ones the built-in renderers print (``event_id=evt_x``) and the ones
434
- #: models write when asked to cite (``evt_x: ...``, ``(evt_x) ...``,
435
- #: ``[evt_x][agent][kind] ...``).
474
+ #: removed and the quoted content itself must still match. A bare ``step 3``
475
+ #: (no colon) counts as framing only when an event reference or a role label
476
+ #: follows it, so ``step 3 of the plan`` keeps its first two words.
436
477
  _FRAME = re.compile(
437
478
  r'^\s*'
438
- r'(?:\[step\s+\d+\]|step\s+\d+\s*[:\-])?\s*'
439
- r'(?:\[(?P<bracket>evt_\w+)\](?:\[[^\]]*\]){0,2}'
440
- r'|\((?P<paren>evt_\w+)\)'
441
- r'|event_id=(?P<kw>[^\s,;:]+)'
442
- r'|(?P<colon>evt_\w+)\s*[:\-])?\s*'
479
+ r'(?:\[step\s+\d+\]|step\s+\d+\s*[:\-]'
480
+ r'|step\s+\d+(?=\s+(?:[\[(]?evt_|event_id\s*=|' + _ROLE_LABEL + r')))?\s*'
481
+ r'(?:' + _EVENT_REF + r')?\s*'
443
482
  r'(?:(?:type|agent)=\S+\s*)*'
483
+ r'(?:' + _ROLE_LABEL + r')?\s*'
444
484
  r'(?:(?:input|output|error|metadata)\s*[:=])?\s*',
445
485
  re.IGNORECASE,
446
486
  )
@@ -497,6 +537,13 @@ def _norm_with_map(text: str) -> Tuple[str, List[Tuple[int, int]]]:
497
537
  spans = [(i, i + 1) for i in range(len(text))]
498
538
  for seq, char in _ESCAPES:
499
539
  chars, spans = _replace_with_map(chars, spans, seq, char)
540
+ return _collapse_ws_with_map(chars, spans)
541
+
542
+
543
+ def _collapse_ws_with_map(
544
+ chars: Sequence[str], spans: Sequence[Tuple[int, int]]
545
+ ) -> Tuple[str, List[Tuple[int, int]]]:
546
+ """``_WS.sub(' ', text).strip()`` over a character list, spans carried along."""
500
547
  out_chars: List[str] = []
501
548
  out_spans: List[Tuple[int, int]] = []
502
549
  i = 0
@@ -521,6 +568,42 @@ def _norm_with_map(text: str) -> Tuple[str, List[Tuple[int, int]]]:
521
568
  return ''.join(out_chars), out_spans
522
569
 
523
570
 
571
+ #: Quotation marks, straight and typographic. A stored tool call is a Python
572
+ #: ``repr`` with single quotes; a model re-quotes it as JSON with double
573
+ #: quotes, or a chat surface curls them. Measured on the consumer corpus
574
+ #: above, 11 quotes located only once these were dropped. Case, wording and
575
+ #: punctuation are still not normalised.
576
+ _QUOTE_MARKS = '"\'`\u2018\u2019\u201c\u201d'
577
+ _QUOTE_CHARS = re.compile('[' + re.escape(_QUOTE_MARKS) + ']')
578
+
579
+
580
+ def _canon(text: str) -> str:
581
+ """:func:`_norm`, then quotation marks dropped and whitespace re-collapsed.
582
+
583
+ Dropping a mark can leave two spaces adjacent (``a ' b``) or one at an
584
+ end (``'x'``), so the collapse runs again; both sides go through the same
585
+ function, so what matters is only that it is deterministic.
586
+ """
587
+ return _WS.sub(' ', _QUOTE_CHARS.sub('', _norm(text))).strip()
588
+
589
+
590
+ def _canon_quote(text: str) -> str:
591
+ """:func:`_canon` of a model-supplied quote, truncation marker removed first."""
592
+ return _canon(_norm_quote(text))
593
+
594
+
595
+ def _canon_with_map(text: str) -> Tuple[str, List[Tuple[int, int]]]:
596
+ """:func:`_canon`, plus the offset map :func:`_norm_with_map` provides.
597
+
598
+ Built on the ``_norm`` map, so the two stay equivalent by construction:
599
+ the mapped characters are filtered and re-collapsed exactly as ``_canon``
600
+ filters and re-collapses the string.
601
+ """
602
+ mapped, spans = _norm_with_map(text)
603
+ kept = [(c, span) for c, span in zip(mapped, spans) if c not in _QUOTE_MARKS]
604
+ return _collapse_ws_with_map([c for c, _ in kept], [span for _, span in kept])
605
+
606
+
524
607
  def _replace_with_map(
525
608
  chars: List[str], spans: List[Tuple[int, int]], seq: str, char: str
526
609
  ) -> Tuple[List[str], List[Tuple[int, int]]]:
@@ -675,50 +758,28 @@ def locate_quote(
675
758
  if anchor_event is not None:
676
759
  order.sort(key=lambda i: events[i] is not anchor_event)
677
760
 
678
- # Rung 1: the quote as given, verbatim.
679
- exact = quote
680
- for i in order:
681
- found = _find_in_event(events[i], i, exact, shown, normalized=False)
682
- if found is not None:
683
- return finish(found)
684
- if trajectory.goal and exact in trajectory.goal:
685
- start = trajectory.goal.index(exact)
686
- return finish(QuoteLocation(
687
- rung=RUNG_EXACT, region=REGION_GOAL, span=(start, start + len(exact)),
688
- text=exact,
689
- ))
690
- if inner and inner != exact:
691
- for i in order:
692
- found = _find_in_event(events[i], i, inner, shown, normalized=False)
693
- if found is not None:
694
- return finish(found)
695
- if trajectory.goal and inner in trajectory.goal:
696
- start = trajectory.goal.index(inner)
697
- return finish(QuoteLocation(
698
- rung=RUNG_EXACT, region=REGION_GOAL, span=(start, start + len(inner)),
699
- text=inner,
700
- ))
701
-
702
- # Rung 2: after the normalisation `verify_finding_quotes` applies, with the
703
- # quote's own framing removed. The unframed form is tried first so that a
704
- # quote copied from a rendering that includes the frame still resolves
705
- # against `shown`.
706
- needles: List[str] = []
707
- for candidate in (_norm_quote(quote), _norm_quote(inner)):
708
- if candidate and candidate not in needles:
709
- needles.append(candidate)
710
- for needle in needles:
711
- for i in order:
712
- found = _find_in_event(events[i], i, needle, shown, normalized=True)
713
- if found is not None:
714
- return finish(found)
715
- if trajectory.goal:
716
- span = _find_normalized(needle, trajectory.goal)
717
- if span is not None:
718
- return finish(QuoteLocation(
719
- rung=RUNG_NORMALIZED, region=REGION_GOAL, span=span,
720
- text=trajectory.goal[span[0]:span[1]],
721
- ))
761
+ # Rung 1: the quote as given, verbatim, then with its own framing removed.
762
+ # Rung 2: after the normalisation `verify_finding_quotes` applies, then --
763
+ # wider than verification -- with quotation marks dropped. At every step
764
+ # the framed form is tried before the unframed one, so that a quote copied
765
+ # from a rendering that includes the frame still resolves against `shown`.
766
+ for rung, prepare, finder in _LADDER:
767
+ needles: List[str] = []
768
+ for candidate in (prepare(quote), prepare(inner)):
769
+ if candidate and candidate not in needles:
770
+ needles.append(candidate)
771
+ for needle in needles:
772
+ for i in order:
773
+ found = _find_in_event(events[i], i, needle, shown, rung, finder)
774
+ if found is not None:
775
+ return finish(found)
776
+ if trajectory.goal:
777
+ span = finder(needle, trajectory.goal)
778
+ if span is not None:
779
+ return finish(QuoteLocation(
780
+ rung=rung, region=REGION_GOAL, span=span,
781
+ text=trajectory.goal[span[0]:span[1]],
782
+ ))
722
783
 
723
784
  # Rung 3: no text located; a real anchor still places the claim at an event.
724
785
  if anchor_event is not None:
@@ -732,35 +793,71 @@ def locate_quote(
732
793
  return finish(QuoteLocation(rung=RUNG_UNRESOLVABLE, region=REGION_NONE))
733
794
 
734
795
 
735
- def _find_normalized(needle: str, haystack: str) -> Optional[Tuple[int, int]]:
736
- """Span of ``needle`` in ``haystack`` after ``_norm``, mapped back to raw offsets.
796
+ _Finder = Callable[[str, str], Optional[Tuple[int, int]]]
797
+ _Mapper = Callable[[str], Tuple[str, List[Tuple[int, int]]]]
798
+
737
799
 
738
- The regex-based ``_norm`` is the fast pre-check; the offset map is built
739
- only for a haystack that contains the needle.
800
+ def _find_mapped(
801
+ needle: str, haystack: str, canonical: Callable[[str], str], with_map: _Mapper
802
+ ) -> Optional[Tuple[int, int]]:
803
+ """Span of an already-canonical ``needle`` in ``haystack``, in raw offsets.
804
+
805
+ The regex-based ``canonical`` is the fast pre-check; the offset map is
806
+ built only for a haystack that contains the needle.
740
807
  """
741
- if not needle or needle not in _norm(haystack):
808
+ if not needle or needle not in canonical(haystack):
742
809
  return None
743
- mapped, spans = _norm_with_map(haystack)
810
+ mapped, spans = with_map(haystack)
744
811
  start = mapped.find(needle)
745
- if start < 0: # pragma: no cover - the map is equivalent to _norm by construction
812
+ if start < 0: # pragma: no cover - the map is equivalent by construction
746
813
  return None
747
814
  end = start + len(needle)
748
815
  return spans[start][0], spans[end - 1][1]
749
816
 
750
817
 
818
+ def _find_normalized(needle: str, haystack: str) -> Optional[Tuple[int, int]]:
819
+ """Span of ``needle`` in ``haystack`` after ``_norm``, mapped back to raw offsets."""
820
+ return _find_mapped(needle, haystack, _norm, _norm_with_map)
821
+
822
+
823
+ def _find_canon(needle: str, haystack: str) -> Optional[Tuple[int, int]]:
824
+ """Span of ``needle`` in ``haystack`` after ``_canon``, mapped back to raw offsets."""
825
+ return _find_mapped(needle, haystack, _canon, _canon_with_map)
826
+
827
+
828
+ def _find_exact(needle: str, haystack: str) -> Optional[Tuple[int, int]]:
829
+ start = haystack.find(needle)
830
+ if start < 0:
831
+ return None
832
+ return start, start + len(needle)
833
+
834
+
835
+ def _verbatim(text: str) -> str:
836
+ return text
837
+
838
+
839
+ #: The rungs :func:`locate_quote` climbs, strictest first: how the quote is
840
+ #: prepared, and how a haystack is searched for it.
841
+ _LADDER: Tuple[Tuple[str, Callable[[str], str], _Finder], ...] = (
842
+ (RUNG_EXACT, _verbatim, _find_exact),
843
+ (RUNG_NORMALIZED, _norm_quote, _find_normalized),
844
+ (RUNG_NORMALIZED, _canon_quote, _find_canon),
845
+ )
846
+
847
+
751
848
  def _find_in_event(
752
849
  event: AgentEvent,
753
850
  index: int,
754
851
  needle: str,
755
852
  shown: Optional[Mapping[str, str]],
756
- normalized: bool,
853
+ rung: str,
854
+ finder: _Finder,
757
855
  ) -> Optional[QuoteLocation]:
758
- rung = RUNG_NORMALIZED if normalized else RUNG_EXACT
759
856
  for field in _EVENT_FIELDS:
760
857
  text = _field_text(event, field)
761
858
  if not text:
762
859
  continue
763
- span = _find_normalized(needle, text) if normalized else _find_exact(needle, text)
860
+ span = finder(needle, text)
764
861
  if span is not None:
765
862
  return QuoteLocation(
766
863
  rung=rung, region=REGION_EVENT, event_id=event.event_id,
@@ -770,7 +867,7 @@ def _find_in_event(
770
867
  )
771
868
  rendered = (shown or {}).get(event.event_id)
772
869
  if rendered:
773
- span = _find_normalized(needle, rendered) if normalized else _find_exact(needle, rendered)
870
+ span = finder(needle, rendered)
774
871
  if span is not None:
775
872
  return QuoteLocation(
776
873
  rung=rung, region=REGION_SHOWN, event_id=event.event_id,
@@ -781,13 +878,6 @@ def _find_in_event(
781
878
  return None
782
879
 
783
880
 
784
- def _find_exact(needle: str, haystack: str) -> Optional[Tuple[int, int]]:
785
- start = haystack.find(needle)
786
- if start < 0:
787
- return None
788
- return start, start + len(needle)
789
-
790
-
791
881
  @dataclass(frozen=True)
792
882
  class QuoteGrounding:
793
883
  """One quote of a finding, located and placed relative to the blamed event.
File without changes
File without changes
File without changes