Skip to content

Commit bfc7a7b

Browse files
acailicclaude
andcommitted
refactor: remove dead code and simplify across backend, SDK, and frontend
Backend: delete collector/scorer.py and collector/intelligence.py re-export wrappers, update 15 import sites to canonical paths, fix pre-existing broken import in collector/server.py. SDK: simplify event registry from custom lazy-loading class to plain dict (lazy-loading was never used — registry eagerly populated), remove duplicated event_value fallback in scorer, delete test for removed lazy-loading mechanism. Frontend: remove 4 unused components (PolicyDiffView, FailureExplanationModal, LiveSummaryPanel, FailureExplanationCard, 357 lines), simplify LiveDashboard (remove dead props/metrics section), clean unused types from types/index.ts (repair fields, ReplayState, RollingSummary, EscalationSignal, PolicyShift). Net: -534 lines across 28 files. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent c266d42 commit bfc7a7b

28 files changed

Lines changed: 29 additions & 563 deletions

agent_debugger_sdk/core/events/registry.py

Lines changed: 3 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -2,66 +2,8 @@
22

33
from __future__ import annotations
44

5-
from typing import TYPE_CHECKING
6-
75
from .base import EventType, TraceEvent
86

9-
if TYPE_CHECKING:
10-
# Type hints for type checkers - these imports are used at runtime in _get_event_classes()
11-
from .agent import AgentTurnEvent, BehaviorAlertEvent # noqa: F401
12-
from .decisions import DecisionEvent # noqa: F401
13-
from .errors import ErrorEvent # noqa: F401
14-
from .llm import LLMRequestEvent, LLMResponseEvent # noqa: F401
15-
from .safety import ( # noqa: F401
16-
PolicyViolationEvent,
17-
PromptPolicyEvent,
18-
RefusalEvent,
19-
SafetyCheckEvent,
20-
)
21-
from .tools import ToolCallEvent, ToolResultEvent # noqa: F401
22-
23-
24-
# Deferred imports to avoid circular dependencies
25-
def _get_event_classes() -> dict[EventType, type[TraceEvent]]:
26-
"""Lazily import event classes to avoid circular dependencies."""
27-
from .agent import AgentTurnEvent, BehaviorAlertEvent
28-
from .decisions import DecisionEvent
29-
from .errors import ErrorEvent
30-
from .llm import LLMRequestEvent, LLMResponseEvent
31-
from .safety import (
32-
PolicyViolationEvent,
33-
PromptPolicyEvent,
34-
RefusalEvent,
35-
SafetyCheckEvent,
36-
)
37-
from .tools import ToolCallEvent, ToolResultEvent
38-
39-
return {
40-
EventType.TOOL_CALL: ToolCallEvent,
41-
EventType.TOOL_RESULT: ToolResultEvent,
42-
EventType.LLM_REQUEST: LLMRequestEvent,
43-
EventType.LLM_RESPONSE: LLMResponseEvent,
44-
EventType.DECISION: DecisionEvent,
45-
EventType.SAFETY_CHECK: SafetyCheckEvent,
46-
EventType.REFUSAL: RefusalEvent,
47-
EventType.POLICY_VIOLATION: PolicyViolationEvent,
48-
EventType.PROMPT_POLICY: PromptPolicyEvent,
49-
EventType.AGENT_TURN: AgentTurnEvent,
50-
EventType.BEHAVIOR_ALERT: BehaviorAlertEvent,
51-
EventType.ERROR: ErrorEvent,
52-
}
53-
54-
55-
# Create the registry as a lazily-evaluated mapping
56-
class _EventTypeRegistry(dict[EventType, type[TraceEvent]]):
57-
"""Lazy-loading registry for event type mappings."""
58-
59-
def __missing__(self, key: EventType) -> type[TraceEvent]:
60-
"""Load event classes on first access."""
61-
self.update(_get_event_classes())
62-
if key in self:
63-
return self[key]
64-
raise KeyError(f"EventType {key} not found in registry")
65-
66-
67-
EVENT_TYPE_REGISTRY: dict[EventType, type[TraceEvent]] = _EventTypeRegistry()
7+
# Simple registry for event type mappings.
8+
# The registry is populated by __init__.py to ensure class identity consistency.
9+
EVENT_TYPE_REGISTRY: dict[EventType, type[TraceEvent]] = {}

agent_debugger_sdk/core/scorer.py

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,9 @@
1010

1111
from agent_debugger_sdk.core.events import EventType, TraceEvent
1212

13-
# Import event_value from collector helpers to consolidate duplication
14-
# Note: This is safe because helpers.py only imports TraceEvent, not scorer
15-
try:
16-
from collector.intelligence.helpers import event_value
17-
except ImportError:
18-
# Fallback for environments where collector is not available
19-
def event_value(event: TraceEvent | None, key: str, default: object = None) -> object:
20-
"""Read structured event fields before falling back to event.data."""
21-
if event is None:
22-
return default
23-
if hasattr(event, key):
24-
return getattr(event, key)
25-
return event.data.get(key, default)
13+
# Import event_value from collector helpers.
14+
# This is safe because helpers.py only imports TraceEvent, not scorer.
15+
from collector.intelligence.helpers import event_value
2616

2717

2818
@dataclass

api/app_context.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from sqlalchemy.ext.asyncio import AsyncEngine, AsyncSession, async_sessionmaker
66

7-
from collector.intelligence import TraceIntelligence
7+
from collector.intelligence.facade import TraceIntelligence
88
from redaction.pipeline import RedactionPipeline
99
from storage.engine import create_db_engine, create_session_maker
1010

api/services.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from api import app_context
1515
from api.schemas import CheckpointSchema, SessionSchema, TraceEventSchema
1616
from collector.buffer import EventBuffer, get_event_buffer
17-
from collector.intelligence import TraceIntelligence
17+
from collector.intelligence.facade import TraceIntelligence
1818
from redaction.pipeline import RedactionPipeline
1919
from storage import TraceRepository
2020

collector/__init__.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,14 @@
88
from . import persistence # noqa: F401
99
from .buffer import EventBuffer, get_event_buffer
1010
from .buffer_base import BufferBase
11-
from .intelligence import TraceIntelligence
11+
from .intelligence.facade import TraceIntelligence
1212
from .persistence import PersistenceManager
13-
from .scorer import ImportanceScorer, get_importance_scorer
1413

1514
__all__ = [
1615
"EventBuffer",
1716
"get_event_buffer",
1817
"BufferBase",
1918
"create_buffer",
20-
"ImportanceScorer",
21-
"get_importance_scorer",
2219
"TraceIntelligence",
2320
"PersistenceManager",
2421
]

collector/intelligence.py

Lines changed: 0 additions & 14 deletions
This file was deleted.

collector/scorer.py

Lines changed: 0 additions & 9 deletions
This file was deleted.

collector/server.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@
2121
Session,
2222
TraceEvent,
2323
)
24+
from agent_debugger_sdk.core.scorer import get_importance_scorer
2425
from auth.middleware import get_tenant_from_api_key
2526
from redaction.pipeline import RedactionPipeline
2627
from storage import TraceRepository
2728

2829
from .buffer import get_event_buffer
29-
from .scorer import get_importance_scorer
3030

3131
# Input size limits for security (DoS prevention)
3232
MAX_DATA_SIZE_BYTES = 1 * 1024 * 1024 # 1MB

frontend/src/components/FailureExplanationCard.tsx

Lines changed: 0 additions & 28 deletions
This file was deleted.

frontend/src/components/FailureExplanationModal.tsx

Lines changed: 0 additions & 95 deletions
This file was deleted.

0 commit comments

Comments
 (0)