htmlgraph 0.26.17__py3-none-any.whl → 0.26.19__py3-none-any.whl

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.
htmlgraph/__init__.py CHANGED
@@ -95,7 +95,7 @@ from htmlgraph.types import (
95
95
  )
96
96
  from htmlgraph.work_type_utils import infer_work_type, infer_work_type_from_id
97
97
 
98
- __version__ = "0.26.17"
98
+ __version__ = "0.26.19"
99
99
  __all__ = [
100
100
  # Exceptions
101
101
  "HtmlGraphError",
@@ -766,22 +766,53 @@ def track_event(hook_type: str, hook_input: dict[str, Any]) -> dict[str, Any]:
766
766
  # CRITICAL FIX: When Method 1 succeeds, also find the task_delegation event!
767
767
  # This ensures parent_activity_id will use the task event, not fall back to UserQuery
768
768
  try:
769
- cursor.execute(
770
- """
771
- SELECT event_id
772
- FROM agent_events
773
- WHERE event_type = 'task_delegation'
774
- AND subagent_type = ?
775
- AND status = 'started'
776
- AND session_id = ?
777
- ORDER BY timestamp DESC
778
- LIMIT 1
779
- """,
780
- (subagent_type, parent_session_id),
781
- )
782
- task_row = cursor.fetchone()
783
- if task_row:
784
- task_event_id_from_db = task_row[0]
769
+ # First try to find task in parent_session_id (if not NULL)
770
+ if parent_session_id:
771
+ cursor.execute(
772
+ """
773
+ SELECT event_id
774
+ FROM agent_events
775
+ WHERE event_type = 'task_delegation'
776
+ AND subagent_type = ?
777
+ AND status = 'started'
778
+ AND session_id = ?
779
+ ORDER BY timestamp DESC
780
+ LIMIT 1
781
+ """,
782
+ (subagent_type, parent_session_id),
783
+ )
784
+ task_row = cursor.fetchone()
785
+ if task_row:
786
+ task_event_id_from_db = task_row[0]
787
+
788
+ # If not found (parent_session_id is NULL), fallback to finding most recent task
789
+ # This handles Claude Code's session reuse where parent_session_id can be NULL
790
+ if not task_event_id_from_db:
791
+ cursor.execute(
792
+ """
793
+ SELECT event_id
794
+ FROM agent_events
795
+ WHERE event_type = 'task_delegation'
796
+ AND subagent_type = ?
797
+ AND status = 'started'
798
+ ORDER BY timestamp DESC
799
+ LIMIT 1
800
+ """,
801
+ (subagent_type,),
802
+ )
803
+ task_row = cursor.fetchone()
804
+ if task_row:
805
+ task_event_id_from_db = task_row[0]
806
+ print(
807
+ f"DEBUG Method 1 fallback: Found task_delegation={task_event_id_from_db} for {subagent_type}",
808
+ file=sys.stderr,
809
+ )
810
+ else:
811
+ print(
812
+ f"DEBUG Method 1: No task_delegation found for subagent_type={subagent_type}",
813
+ file=sys.stderr,
814
+ )
815
+ else:
785
816
  print(
786
817
  f"DEBUG Method 1: Found task_delegation={task_event_id_from_db} for subagent {subagent_type}",
787
818
  file=sys.stderr,
@@ -1094,10 +1125,40 @@ def track_event(hook_type: str, hook_input: dict[str, Any]) -> dict[str, Any]:
1094
1125
  # use that as the parent for all tool calls within the subagent
1095
1126
  elif task_event_id_from_db:
1096
1127
  parent_activity_id = task_event_id_from_db
1097
- # Query database for most recent UserQuery event as parent
1098
- # Database is the single source of truth for parent-child linking
1128
+ # CRITICAL FIX: Check for active task_delegation EVEN IF task_event_id_from_db not set
1129
+ # This handles Claude Code's session reuse where parent_session_id is NULL
1130
+ # When tool calls come from a subagent, they should be under the task_delegation parent,
1131
+ # NOT under UserQuery. So we MUST check for active tasks BEFORE falling back to UserQuery.
1099
1132
  elif db:
1100
- parent_activity_id = get_parent_user_query(db, active_session_id)
1133
+ # Try to find an active task_delegation event
1134
+ try:
1135
+ cursor = db.connection.cursor() # type: ignore[union-attr]
1136
+ cursor.execute(
1137
+ """
1138
+ SELECT event_id
1139
+ FROM agent_events
1140
+ WHERE event_type = 'task_delegation'
1141
+ AND status = 'started'
1142
+ ORDER BY timestamp DESC
1143
+ LIMIT 1
1144
+ """,
1145
+ )
1146
+ task_row = cursor.fetchone()
1147
+ if task_row:
1148
+ parent_activity_id = task_row[0]
1149
+ print(
1150
+ f"DEBUG: Found active task_delegation={parent_activity_id} in parent_activity_id fallback",
1151
+ file=sys.stderr,
1152
+ )
1153
+ except Exception as e:
1154
+ print(
1155
+ f"DEBUG: Error finding task_delegation in parent_activity_id: {e}",
1156
+ file=sys.stderr,
1157
+ )
1158
+
1159
+ # Only if no active task found, fall back to UserQuery
1160
+ if not parent_activity_id:
1161
+ parent_activity_id = get_parent_user_query(db, active_session_id)
1101
1162
 
1102
1163
  # Track the activity
1103
1164
  nudge = None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: htmlgraph
3
- Version: 0.26.17
3
+ Version: 0.26.19
4
4
  Summary: HTML is All You Need - Graph database on web standards
5
5
  Project-URL: Homepage, https://github.com/Shakes-tzd/htmlgraph
6
6
  Project-URL: Documentation, https://github.com/Shakes-tzd/htmlgraph#readme
@@ -1,4 +1,4 @@
1
- htmlgraph/__init__.py,sha256=8NssRZ_s0HFZ69J27yuvYBZshbmq3uHoUSsTyvdO4Kw,5718
1
+ htmlgraph/__init__.py,sha256=Z3qd3jS8qYZt8MI_sa2cpGA2PCk4XUyRE5Iq3YPpSfk,5718
2
2
  htmlgraph/agent_detection.py,sha256=wEmrDv4hssPX2OkEnJZBHPbalxcaloiJF_hOOow_5WE,3511
3
3
  htmlgraph/agent_registry.py,sha256=Usa_35by7p5gtpvHO7K3AcGimnorw-FzgPVa3cWTQ58,9448
4
4
  htmlgraph/agents.py,sha256=Yvu6x1nOfrW2WhRTAHiCuSpvqoVJXx1Mkzd59kwEczw,33466
@@ -192,7 +192,7 @@ htmlgraph/hooks/cigs_pretool_enforcer.py,sha256=Lyp4DDaw_sVHEcW-kzdegldyfXjvVD25
192
192
  htmlgraph/hooks/concurrent_sessions.py,sha256=qOiwDfynphVG0-2pVBakEzOwMORU8ebN1gMjcN4S0z0,6476
193
193
  htmlgraph/hooks/context.py,sha256=tJ4dIL8uTFHyqyuuMc-ETDuOikeD5cN3Mdjmfg6W0HE,13108
194
194
  htmlgraph/hooks/drift_handler.py,sha256=QckL5U5ooku51kI6mppGLsXzaKVt1Yx5uNu-iXZrgSk,17602
195
- htmlgraph/hooks/event_tracker.py,sha256=tSlgrWA9KEQVJDGy_hF6DfRdKaedrqHs9m7Xir_VOUs,48231
195
+ htmlgraph/hooks/event_tracker.py,sha256=0EQFRiz4tihADiaaF2yQqJ635re-LTR1brKDi0wvUx8,51245
196
196
  htmlgraph/hooks/git_commands.py,sha256=NPzthfzGJ_bkDi7soehHOxI9FLL-6BL8Tie9Byb_zf4,4803
197
197
  htmlgraph/hooks/hooks-config.example.json,sha256=tXpk-U-FZzGOoNJK2uiDMbIHCYEHA794J-El0fBwkqg,197
198
198
  htmlgraph/hooks/installer.py,sha256=nOctCFDEV7BEh7ZzxNY-apu1KZG0SHPMq74UPIOChqY,11756
@@ -252,12 +252,12 @@ htmlgraph/templates/AGENTS.md.template,sha256=f96h7V6ygwj-v-fanVI48eYMxR6t_se4be
252
252
  htmlgraph/templates/CLAUDE.md.template,sha256=h1kG2hTX2XYig2KszsHBfzrwa_4Cfcq2Pj4SwqzeDlM,1984
253
253
  htmlgraph/templates/GEMINI.md.template,sha256=gAGzE53Avki87BM_otqy5HdcYCoLsHgqaKjVzNzPMX8,1622
254
254
  htmlgraph/templates/orchestration-view.html,sha256=DlS7LlcjH0oO_KYILjuF1X42t8QhKLH4F85rkO54alY,10472
255
- htmlgraph-0.26.17.data/data/htmlgraph/dashboard.html,sha256=MUT6SaYnazoyDcvHz5hN1omYswyIoUfeoZLf2M_iblo,251268
256
- htmlgraph-0.26.17.data/data/htmlgraph/styles.css,sha256=oDUSC8jG-V-hKojOBO9J88hxAeY2wJrBYTq0uCwX_Y4,7135
257
- htmlgraph-0.26.17.data/data/htmlgraph/templates/AGENTS.md.template,sha256=f96h7V6ygwj-v-fanVI48eYMxR6t_se4bet1H4ZsDpI,7642
258
- htmlgraph-0.26.17.data/data/htmlgraph/templates/CLAUDE.md.template,sha256=h1kG2hTX2XYig2KszsHBfzrwa_4Cfcq2Pj4SwqzeDlM,1984
259
- htmlgraph-0.26.17.data/data/htmlgraph/templates/GEMINI.md.template,sha256=gAGzE53Avki87BM_otqy5HdcYCoLsHgqaKjVzNzPMX8,1622
260
- htmlgraph-0.26.17.dist-info/METADATA,sha256=DQseSEEJx0CyN8Y-3NcndcjbkwFLX6yGPbr5TEMWep8,10237
261
- htmlgraph-0.26.17.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
262
- htmlgraph-0.26.17.dist-info/entry_points.txt,sha256=Wmdo5cx8pt6NoMsssVE2mZH1CZLSUsrg_3iSWatiyn0,103
263
- htmlgraph-0.26.17.dist-info/RECORD,,
255
+ htmlgraph-0.26.19.data/data/htmlgraph/dashboard.html,sha256=MUT6SaYnazoyDcvHz5hN1omYswyIoUfeoZLf2M_iblo,251268
256
+ htmlgraph-0.26.19.data/data/htmlgraph/styles.css,sha256=oDUSC8jG-V-hKojOBO9J88hxAeY2wJrBYTq0uCwX_Y4,7135
257
+ htmlgraph-0.26.19.data/data/htmlgraph/templates/AGENTS.md.template,sha256=f96h7V6ygwj-v-fanVI48eYMxR6t_se4bet1H4ZsDpI,7642
258
+ htmlgraph-0.26.19.data/data/htmlgraph/templates/CLAUDE.md.template,sha256=h1kG2hTX2XYig2KszsHBfzrwa_4Cfcq2Pj4SwqzeDlM,1984
259
+ htmlgraph-0.26.19.data/data/htmlgraph/templates/GEMINI.md.template,sha256=gAGzE53Avki87BM_otqy5HdcYCoLsHgqaKjVzNzPMX8,1622
260
+ htmlgraph-0.26.19.dist-info/METADATA,sha256=JFDksv4VQ6eDi6EHcKH8wwlMFxM6alM_iW0LoHlBIVA,10237
261
+ htmlgraph-0.26.19.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
262
+ htmlgraph-0.26.19.dist-info/entry_points.txt,sha256=Wmdo5cx8pt6NoMsssVE2mZH1CZLSUsrg_3iSWatiyn0,103
263
+ htmlgraph-0.26.19.dist-info/RECORD,,