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.
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/PKG-INFO +1 -1
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/pyproject.toml +1 -1
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/__init__.py +1 -1
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/evidence.py +166 -76
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/LICENSE +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/README.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/ARCHITECTURE.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/GUI_RCA_COMMANDS.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/TRACE_SCHEMA.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/assets/UI.png +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/assets/logo-dark.svg +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/assets/logo.png +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/assets/logo.svg +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/assets/overview.pdf +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/assets/overview.png +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/assets/stylesheets/extra.css +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/concepts/workflow.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/getting-started/installation.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/getting-started/quickstart.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/guides/diagnose.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/guides/gui-rca.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/guides/ingest.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/guides/local-ui.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/guides/rerun.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/help/build-docs.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/help/troubleshooting.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/index.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/reference/cli.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/reference/diagnostic-report.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/reference/python-api.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/docs/taxonomy_manifest.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/batch/README.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/batch/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/batch/workflow.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/README.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/config.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/context.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/contracts.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/filtering.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/hosts/CODEX_SUPPORT.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/hosts/README.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/hosts/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/hosts/base.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/hosts/claude_code.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/hosts/codex.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/hosts/registry.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/identity.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/repository.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/service.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/capture/snapshot.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/README.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/__main__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/commands/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/commands/batch.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/commands/capture.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/commands/config.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/commands/diagnose.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/commands/doctor.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/commands/hub.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/commands/ingest.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/commands/integrations.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/commands/rerun.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/commands/run.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/commands/runner.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/commands/serve.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/commands/store.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/commands/ui.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/legacy.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/cli/main.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/core/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/core/events.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/core/gui_taxonomy.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/core/llm.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/core/llm_channel.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/core/models.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/core/plugins/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/core/plugins/registry.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/core/plugins/types.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/core/storage.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/core/taxonomy.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/README.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/actions/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/actions/attribution.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/actions/hub/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/actions/hub/backend_base.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/actions/hub/backends.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/actions/hub/bundle.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/actions/hub/scrub.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/actions/integrations/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/actions/integrations/_templates.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/actions/integrations/claude_skill.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/actions/integrations/debug_skill.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/actions/integrations/openhands.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/actions/moe.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/actions/recovery.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/analyzers.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/attribute/README.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/attribute/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/attribute/async_api.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/attribute/attribution.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/attribute/deep_memory.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/attribute/deepdebug.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/attribute/moe.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/attribute/reference.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/attribute/trajdebug.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/attribute/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/attribute/all_at_once.json +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/attribute/binary_search.json +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/attribute/counterfactual.json +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/attribute/deepdebug.json +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/attribute/heuristic.json +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/attribute/step_by_step.json +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/attribute/trajdebug.json +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/detect/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/detect/heuristic.json +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/detect/llm_judge.json +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/detect/perstep.json +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/detect/stage_a.json +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/detect/trajdebug.json +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/recover/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/recover/auto_manual.json +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/recover/critic.json +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/recover/deepdebug.json +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/recover/reflexion.json +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/recover/saga_rollback.json +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/component_manifests/recover/self_refine.json +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/context.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/deep.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/deep_memory.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/README.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/analyzers.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/compression.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/detectors.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/judge.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/perstep.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules/agenterrorbench.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules/base.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules/core.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules/gui.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules/packs/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules/packs/agenterrorbench/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules/packs/agenterrorbench/manifest.json +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules/packs/agenterrorbench/rules.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules/packs/core/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules/packs/core/manifest.json +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules/packs/core/rules.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules/packs/gui/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules/packs/gui/manifest.json +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules/packs/gui/rules.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules/registry.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/rules.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/selection.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/taxonomy_induction.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detect/trajdebug.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/detectors.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/deterministic.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/gui_rca.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/judge.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/judges.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/pipeline.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/profiles/README.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/profiles/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/profiles/deepdebug.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/recover/README.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/recover/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/recover/recovery.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/registry.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/rules/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/rules/agenterrorbench.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/rules/base.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/rules/core.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/rules/gui.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/rules/registry.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/taxonomy_induction.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/__main__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/agent.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/config/debugger.example.json +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/config.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/discuss.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/dispatch.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/eval/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/eval/accuracy.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/evolving/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/evolving/alignment.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/evolving/case_loader.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/evolving/prompts.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/evolving/protocol.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/evolving/runner.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/evolving/state.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/evolving/tools.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/ingester.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/memory/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/memory/annotation_loader.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/memory/distill.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/memory/episode_memory.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/memory/intention.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/memory/lesson_injector.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/memory/lesson_memory.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/memory/semantic_merge.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/openai_adapter.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/output.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/perplexity_adapter.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/pipeline/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/pipeline/classify.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/pipeline/client_factory.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/pipeline/orchestrator.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/pipeline/results.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/pipeline/runtime.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/pipeline/worker.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/prompts.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/prompts_discuss.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/rca.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/scripts/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/scripts/download_input_trajectory.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/tagger.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/taxonomy.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/together_adapter.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/tools/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/tools/lesson_explorer.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/trajectory.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/trajectory_normalizer.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/utils/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/utils/lock.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/utils/logger.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/vis/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/vis/debugger_app.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/gui/vis/generate_assignments.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/hub/README.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/hub/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/hub/backend_base.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/hub/backends.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/hub/bundle.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/hub/scrub.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/README.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/adapters/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/adapters/base.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/adapters/crewai.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/adapters/gaia_odr.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/adapters/importers.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/adapters/langgraph.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/adapters/openai_agents.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/adapters/osworld.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/adapters/otel.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/adapters/raw.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/adapters/trajdebug.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/core/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/importers.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/instrumentation.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/native_protocol.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/ingest/recorder.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/README.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/discussion.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/traceback.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/ui/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/ui/app.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/ui/assets/robot-avatar.svg +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/ui/branch_store.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/ui/discussion_store.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/ui/llm_convert.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/ui/manager.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/ui/mcp_rerun.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/ui/routes.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/ui/server.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/ui/services.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/ui/upload.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/inspect/ui/views.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/integrations/README.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/integrations/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/integrations/_templates.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/integrations/agentdebug_skill/SKILL.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/integrations/agentdebug_skill/references/analysis.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/integrations/agentdebug_skill/references/cli_reference.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/integrations/agentdebug_skill/references/formats.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/integrations/agentdebug_skill/references/recovery.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/integrations/agentdebug_skill/references/safety.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/integrations/agentdebug_skill/references/setup.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/integrations/capture_management.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/integrations/claude_skill.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/integrations/codex_skill.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/integrations/debug_skill.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/integrations/management.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/integrations/openhands.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/provenance.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/py.typed +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/ACTOR_TASK_SPEC.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/README.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/RUNNER_SPEC.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/SIMULATION_SPEC.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/actor_task.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/branch.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/evaluators.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/executors/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/executors/base.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/executors/http_live.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/executors/llm_continuation.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/executors/process_live.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/http_service.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/live_validation.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/request.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/rerun/workflow.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/runtime/README.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/runtime/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/runtime/events.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/runtime/gui_taxonomy.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/runtime/llm.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/runtime/llm_channel.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/runtime/plugins/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/runtime/plugins/registry.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/runtime/plugins/types.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/runtime/storage.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/schema/README.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/schema/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/schema/models.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/schema/taxonomy.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/taxonomy_manifest.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/workbench/README.md +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/workbench/__init__.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/workbench/models.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/workbench/profiles.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/workbench/registry.py +0 -0
- {agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/workbench/service.py +0 -0
|
@@ -39,7 +39,17 @@ from __future__ import annotations
|
|
|
39
39
|
|
|
40
40
|
import re
|
|
41
41
|
from dataclasses import dataclass
|
|
42
|
-
from typing import
|
|
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]) ->
|
|
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
|
|
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
|
|
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.
|
|
433
|
-
#:
|
|
434
|
-
#:
|
|
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*[:\-]
|
|
439
|
-
r'(
|
|
440
|
-
r'
|
|
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
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
if
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
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
|
-
|
|
736
|
-
|
|
796
|
+
_Finder = Callable[[str, str], Optional[Tuple[int, int]]]
|
|
797
|
+
_Mapper = Callable[[str], Tuple[str, List[Tuple[int, int]]]]
|
|
798
|
+
|
|
737
799
|
|
|
738
|
-
|
|
739
|
-
|
|
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
|
|
808
|
+
if not needle or needle not in canonical(haystack):
|
|
742
809
|
return None
|
|
743
|
-
mapped, spans =
|
|
810
|
+
mapped, spans = with_map(haystack)
|
|
744
811
|
start = mapped.find(needle)
|
|
745
|
-
if start < 0: # pragma: no cover - the map is equivalent
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/actions/integrations/__init__.py
RENAMED
|
File without changes
|
{agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/actions/integrations/_templates.py
RENAMED
|
File without changes
|
{agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/actions/integrations/claude_skill.py
RENAMED
|
File without changes
|
{agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/actions/integrations/debug_skill.py
RENAMED
|
File without changes
|
{agentdebugx-0.5.1 → agentdebugx-0.5.2}/src/agentdebug/diagnose/actions/integrations/openhands.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|