htmlgraph 0.26.6__tar.gz → 0.26.8__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 (495) hide show
  1. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/PKG-INFO +1 -1
  2. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/packages/gemini-extension/gemini-extension.json +1 -1
  3. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/pyproject.toml +1 -1
  4. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/__init__.py +1 -1
  5. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/hooks/event_tracker.py +223 -17
  6. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/hooks/subagent_stop.py +71 -12
  7. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/hooks/test_event_tracker.py +513 -17
  8. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_codex_spawner.py +17 -13
  9. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_copilot_spawner_tracking.py +58 -47
  10. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_gemini_spawner_diagnosis.py +2 -2
  11. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_pretooluse_event_hierarchy.py +115 -23
  12. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/.gitignore +0 -0
  13. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/README.md +0 -0
  14. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/agent-coordination/README.md +0 -0
  15. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/agent-coordination/demo.py +0 -0
  16. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/create_auth_track_demo.py +0 -0
  17. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/create_htmlgraph_dev_track.py +0 -0
  18. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/demo_agent_planning.py +0 -0
  19. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/demo_real_project_analytics.py +0 -0
  20. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/demo_sdk_operations.py +0 -0
  21. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/documentation-site/README.md +0 -0
  22. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/documentation-site/agents.json +0 -0
  23. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/documentation-site/demo.py +0 -0
  24. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/documentation-site/features/doc-api-graph.html +0 -0
  25. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/documentation-site/features/doc-api-overview.html +0 -0
  26. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/documentation-site/features/doc-api-sdk.html +0 -0
  27. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/documentation-site/features/doc-example-advanced.html +0 -0
  28. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/documentation-site/features/doc-example-basic.html +0 -0
  29. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/documentation-site/features/doc-index.html +0 -0
  30. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/documentation-site/features/doc-installation.html +0 -0
  31. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/documentation-site/features/doc-quickstart.html +0 -0
  32. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/example_query_compilation.py +0 -0
  33. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/handoff-demo.py +0 -0
  34. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/knowledge-base/README.md +0 -0
  35. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/knowledge-base/agents.json +0 -0
  36. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/knowledge-base/demo.py +0 -0
  37. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/knowledge-base/features/feat-276c615f.html +0 -0
  38. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/knowledge-base/features/feat-7a6f797d.html +0 -0
  39. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/knowledge-base/features/note-ai-agents.html +0 -0
  40. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/knowledge-base/features/note-graph-db.html +0 -0
  41. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/knowledge-base/features/note-htmlgraph.html +0 -0
  42. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/knowledge-base/features/note-web-standards.html +0 -0
  43. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/parallel_task_coordination.py +0 -0
  44. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/routing-demo.py +0 -0
  45. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/sdk_demo.py +0 -0
  46. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/todo-list/README.md +0 -0
  47. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/todo-list/demo.py +0 -0
  48. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/todo-list/index.html +0 -0
  49. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/todo-list/styles.css +0 -0
  50. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/todo-list/task-001.html +0 -0
  51. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/todo-list/task-002.html +0 -0
  52. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/todo-list/task-003.html +0 -0
  53. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/todo-list/task-004.html +0 -0
  54. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/todo-list/task-005.html +0 -0
  55. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/examples/todo-list/task-006.html +0 -0
  56. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/packages/gemini-extension/GEMINI.md +0 -0
  57. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/packages/gemini-extension/README.md +0 -0
  58. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/packages/gemini-extension/command_deploy.md +0 -0
  59. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/packages/gemini-extension/command_end.md +0 -0
  60. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/packages/gemini-extension/command_feature-add.md +0 -0
  61. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/packages/gemini-extension/command_feature-complete.md +0 -0
  62. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/packages/gemini-extension/command_feature-primary.md +0 -0
  63. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/packages/gemini-extension/command_feature-start.md +0 -0
  64. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/packages/gemini-extension/command_git-commit.md +0 -0
  65. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/packages/gemini-extension/command_help.md +0 -0
  66. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/packages/gemini-extension/command_init.md +0 -0
  67. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/packages/gemini-extension/command_plan.md +0 -0
  68. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/packages/gemini-extension/command_recommend.md +0 -0
  69. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/packages/gemini-extension/command_serve.md +0 -0
  70. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/packages/gemini-extension/command_spike.md +0 -0
  71. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/packages/gemini-extension/command_start.md +0 -0
  72. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/packages/gemini-extension/command_status.md +0 -0
  73. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/packages/gemini-extension/command_track.md +0 -0
  74. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/packages/gemini-extension/hooks/hooks.json +0 -0
  75. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/packages/gemini-extension/hooks/scripts/post-tool.sh +0 -0
  76. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/packages/gemini-extension/hooks/scripts/session-end.sh +0 -0
  77. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/packages/gemini-extension/hooks/scripts/session-start.sh +0 -0
  78. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/js/htmlgraph.js +0 -0
  79. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/.htmlgraph/.session-warning-state.json +0 -0
  80. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/.htmlgraph/agents.json +0 -0
  81. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/.htmlgraph/htmlgraph.db +0 -0
  82. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/agent_detection.py +0 -0
  83. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/agent_registry.py +0 -0
  84. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/agents.py +0 -0
  85. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/analytics/__init__.py +0 -0
  86. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/analytics/cli.py +0 -0
  87. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/analytics/cross_session.py +0 -0
  88. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/analytics/dependency.py +0 -0
  89. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/analytics/work_type.py +0 -0
  90. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/analytics_index.py +0 -0
  91. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/api/__init__.py +0 -0
  92. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/api/main.py +0 -0
  93. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/api/static/htmx.min.js +0 -0
  94. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/api/static/style-redesign.css +0 -0
  95. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/api/static/style.css +0 -0
  96. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/api/templates/dashboard-redesign.html +0 -0
  97. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/api/templates/dashboard.html +0 -0
  98. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/api/templates/partials/activity-feed-hierarchical.html +0 -0
  99. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/api/templates/partials/activity-feed.html +0 -0
  100. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/api/templates/partials/agents-redesign.html +0 -0
  101. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/api/templates/partials/agents.html +0 -0
  102. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/api/templates/partials/event-traces.html +0 -0
  103. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/api/templates/partials/features-kanban-redesign.html +0 -0
  104. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/api/templates/partials/features.html +0 -0
  105. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/api/templates/partials/metrics-redesign.html +0 -0
  106. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/api/templates/partials/metrics.html +0 -0
  107. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/api/templates/partials/orchestration-redesign.html +0 -0
  108. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/api/templates/partials/orchestration.html +0 -0
  109. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/api/templates/partials/spawners.html +0 -0
  110. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/archive/__init__.py +0 -0
  111. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/archive/bloom.py +0 -0
  112. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/archive/fts.py +0 -0
  113. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/archive/manager.py +0 -0
  114. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/archive/search.py +0 -0
  115. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/atomic_ops.py +0 -0
  116. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/attribute_index.py +0 -0
  117. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/builders/__init__.py +0 -0
  118. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/builders/base.py +0 -0
  119. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/builders/bug.py +0 -0
  120. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/builders/chore.py +0 -0
  121. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/builders/epic.py +0 -0
  122. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/builders/feature.py +0 -0
  123. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/builders/insight.py +0 -0
  124. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/builders/metric.py +0 -0
  125. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/builders/pattern.py +0 -0
  126. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/builders/phase.py +0 -0
  127. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/builders/spike.py +0 -0
  128. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/builders/track.py +0 -0
  129. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/cigs/__init__.py +0 -0
  130. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/cigs/autonomy.py +0 -0
  131. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/cigs/cost.py +0 -0
  132. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/cigs/messages_basic.py +0 -0
  133. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/cigs/messaging.py +0 -0
  134. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/cigs/models.py +0 -0
  135. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/cigs/pattern_storage.py +0 -0
  136. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/cigs/patterns.py +0 -0
  137. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/cigs/posttool_analyzer.py +0 -0
  138. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/cigs/reporter.py +0 -0
  139. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/cigs/tracker.py +0 -0
  140. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/cli/.htmlgraph/.session-warning-state.json +0 -0
  141. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/cli/.htmlgraph/agents.json +0 -0
  142. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/cli/__init__.py +0 -0
  143. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/cli/__main__.py +0 -0
  144. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/cli/analytics.py +0 -0
  145. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/cli/base.py +0 -0
  146. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/cli/constants.py +0 -0
  147. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/cli/core.py +0 -0
  148. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/cli/main.py +0 -0
  149. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/cli/models.py +0 -0
  150. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/cli/templates/__init__.py +0 -0
  151. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/cli/templates/cost_dashboard.py +0 -0
  152. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/cli/work/__init__.py +0 -0
  153. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/cli/work/features.py +0 -0
  154. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/cli/work/orchestration.py +0 -0
  155. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/cli/work/sessions.py +0 -0
  156. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/cli/work/tracks.py +0 -0
  157. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/cli_commands/__init__.py +0 -0
  158. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/cli_commands/feature.py +0 -0
  159. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/cli_framework.py +0 -0
  160. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/collections/__init__.py +0 -0
  161. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/collections/base.py +0 -0
  162. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/collections/bug.py +0 -0
  163. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/collections/chore.py +0 -0
  164. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/collections/epic.py +0 -0
  165. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/collections/feature.py +0 -0
  166. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/collections/insight.py +0 -0
  167. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/collections/metric.py +0 -0
  168. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/collections/pattern.py +0 -0
  169. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/collections/phase.py +0 -0
  170. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/collections/session.py +0 -0
  171. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/collections/spike.py +0 -0
  172. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/collections/task_delegation.py +0 -0
  173. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/collections/todo.py +0 -0
  174. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/collections/traces.py +0 -0
  175. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/config.py +0 -0
  176. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/context_analytics.py +0 -0
  177. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/converter.py +0 -0
  178. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/cost_analysis/__init__.py +0 -0
  179. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/cost_analysis/analyzer.py +0 -0
  180. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/dashboard.html +0 -0
  181. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/dashboard.html.backup +0 -0
  182. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/dashboard.html.bak +0 -0
  183. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/dashboard.html.bak2 +0 -0
  184. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/dashboard.html.bak3 +0 -0
  185. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/db/__init__.py +0 -0
  186. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/db/queries.py +0 -0
  187. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/db/schema.py +0 -0
  188. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/dependency_models.py +0 -0
  189. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/deploy.py +0 -0
  190. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/deployment_models.py +0 -0
  191. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/docs/API_REFERENCE.md +0 -0
  192. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/docs/HTTP_API.md +0 -0
  193. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/docs/INTEGRATION_GUIDE.md +0 -0
  194. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/docs/ORCHESTRATION_PATTERNS.md +0 -0
  195. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/docs/README.md +0 -0
  196. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/docs/__init__.py +0 -0
  197. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/docs/docs_version.py +0 -0
  198. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/docs/metadata.py +0 -0
  199. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/docs/migrations.py +0 -0
  200. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/docs/template_engine.py +0 -0
  201. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/docs/templates/_sections/cli_reference.md.j2 +0 -0
  202. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/docs/templates/_sections/core_concepts.md.j2 +0 -0
  203. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/docs/templates/_sections/sdk_basics.md.j2 +0 -0
  204. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/docs/templates/base_agents.md.j2 +0 -0
  205. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/docs/templates/example_user_override.md.j2 +0 -0
  206. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/docs/version_check.py +0 -0
  207. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/edge_index.py +0 -0
  208. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/error_handler.py +0 -0
  209. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/event_log.py +0 -0
  210. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/event_migration.py +0 -0
  211. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/exceptions.py +0 -0
  212. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/extensions/gemini/GEMINI.md +0 -0
  213. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/extensions/gemini/README.md +0 -0
  214. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/extensions/gemini/gemini-extension.json +0 -0
  215. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/extensions/gemini/hooks/hooks.json +0 -0
  216. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/extensions/gemini/hooks/scripts/post-tool.sh +0 -0
  217. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/extensions/gemini/hooks/scripts/session-end.sh +0 -0
  218. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/extensions/gemini/hooks/scripts/session-start.sh +0 -0
  219. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/file_watcher.py +0 -0
  220. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/find_api.py +0 -0
  221. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/git_events.py +0 -0
  222. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/graph.py +0 -0
  223. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/hooks/.htmlgraph/.session-warning-state.json +0 -0
  224. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/hooks/.htmlgraph/agents.json +0 -0
  225. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/hooks/.htmlgraph/index.sqlite +0 -0
  226. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/hooks/__init__.py +0 -0
  227. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/hooks/bootstrap.py +0 -0
  228. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/hooks/cigs_pretool_enforcer.py +0 -0
  229. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/hooks/concurrent_sessions.py +0 -0
  230. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/hooks/context.py +0 -0
  231. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/hooks/drift_handler.py +0 -0
  232. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/hooks/git_commands.py +0 -0
  233. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/hooks/hooks-config.example.json +0 -0
  234. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/hooks/installer.py +0 -0
  235. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/hooks/orchestrator.py +0 -0
  236. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/hooks/orchestrator_reflector.py +0 -0
  237. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/hooks/post-checkout.sh +0 -0
  238. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/hooks/post-commit.sh +0 -0
  239. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/hooks/post-merge.sh +0 -0
  240. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/hooks/post_tool_use_failure.py +0 -0
  241. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/hooks/post_tool_use_handler.py +0 -0
  242. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/hooks/posttooluse.py +0 -0
  243. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/hooks/pre-commit.sh +0 -0
  244. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/hooks/pre-push.sh +0 -0
  245. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/hooks/pretooluse.py +0 -0
  246. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/hooks/prompt_analyzer.py +0 -0
  247. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/hooks/session_handler.py +0 -0
  248. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/hooks/session_summary.py +0 -0
  249. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/hooks/state_manager.py +0 -0
  250. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/hooks/subagent_detection.py +0 -0
  251. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/hooks/task_enforcer.py +0 -0
  252. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/hooks/task_validator.py +0 -0
  253. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/hooks/validator.py +0 -0
  254. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/ids.py +0 -0
  255. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/index.d.ts +0 -0
  256. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/learning.py +0 -0
  257. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/mcp_server.py +0 -0
  258. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/models.py +0 -0
  259. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/operations/README.md +0 -0
  260. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/operations/__init__.py +0 -0
  261. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/operations/analytics.py +0 -0
  262. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/operations/events.py +0 -0
  263. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/operations/fastapi_server.py +0 -0
  264. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/operations/hooks.py +0 -0
  265. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/operations/initialization.py +0 -0
  266. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/operations/initialization.py.backup +0 -0
  267. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/operations/server.py +0 -0
  268. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/orchestration/__init__.py +0 -0
  269. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/orchestration/claude_launcher.py +0 -0
  270. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/orchestration/command_builder.py +0 -0
  271. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/orchestration/headless_spawner.py +0 -0
  272. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/orchestration/live_events.py +0 -0
  273. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/orchestration/model_selection.py +0 -0
  274. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/orchestration/plugin_manager.py +0 -0
  275. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/orchestration/prompts.py +0 -0
  276. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/orchestration/spawners/__init__.py +0 -0
  277. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/orchestration/spawners/base.py +0 -0
  278. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/orchestration/spawners/claude.py +0 -0
  279. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/orchestration/spawners/codex.py +0 -0
  280. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/orchestration/spawners/copilot.py +0 -0
  281. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/orchestration/spawners/gemini.py +0 -0
  282. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/orchestration/subprocess_runner.py +0 -0
  283. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/orchestration/task_coordination.py +0 -0
  284. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/orchestration.md +0 -0
  285. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/orchestrator-system-prompt-optimized.txt +0 -0
  286. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/orchestrator.py +0 -0
  287. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/orchestrator_config.py +0 -0
  288. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/orchestrator_mode.py +0 -0
  289. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/orchestrator_validator.py +0 -0
  290. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/parallel.py +0 -0
  291. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/parser.py +0 -0
  292. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/planning.py +0 -0
  293. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/pydantic_models.py +0 -0
  294. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/quality_gates.py +0 -0
  295. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/query_builder.py +0 -0
  296. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/reflection.py +0 -0
  297. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/repo_hash.py +0 -0
  298. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/routing.py +0 -0
  299. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/scripts/__init__.py +0 -0
  300. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/scripts/deploy.py +0 -0
  301. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/sdk.py +0 -0
  302. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/server.py +0 -0
  303. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/services/__init__.py +0 -0
  304. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/services/claiming.py +0 -0
  305. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/session_hooks.py +0 -0
  306. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/session_manager.py +0 -0
  307. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/session_registry.py +0 -0
  308. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/session_state.py +0 -0
  309. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/session_warning.py +0 -0
  310. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/setup.py +0 -0
  311. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/spike_index.py +0 -0
  312. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/styles.css +0 -0
  313. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/sync_docs.py +0 -0
  314. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/system_prompts.py +0 -0
  315. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/templates/AGENTS.md.template +0 -0
  316. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/templates/CLAUDE.md.template +0 -0
  317. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/templates/GEMINI.md.template +0 -0
  318. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/templates/orchestration-view.html +0 -0
  319. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/track_builder.py +0 -0
  320. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/track_manager.py +0 -0
  321. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/transcript.py +0 -0
  322. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/transcript_analytics.py +0 -0
  323. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/types.py +0 -0
  324. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/validation.py +0 -0
  325. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/watch.py +0 -0
  326. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/src/python/htmlgraph/work_type_utils.py +0 -0
  327. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/benchmarks/README.md +0 -0
  328. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/benchmarks/__init__.py +0 -0
  329. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/benchmarks/bench_graph.py +0 -0
  330. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/benchmarks/conftest.py +0 -0
  331. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/hooks/__init__.py +0 -0
  332. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/hooks/test_bootstrap.py +0 -0
  333. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/hooks/test_concurrent_sessions.py +0 -0
  334. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/hooks/test_context.py +0 -0
  335. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/hooks/test_git_commands.py +0 -0
  336. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/hooks/test_hybrid_event_capture.py +0 -0
  337. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/hooks/test_prompt_analyzer.py +0 -0
  338. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/hooks/test_session_handler.py +0 -0
  339. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/hooks/test_state_manager.py +0 -0
  340. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/hooks/test_system_prompt_persistence.py +0 -0
  341. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/hooks/test_system_prompt_persistence_integration.py +0 -0
  342. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/multi_agent/README.md +0 -0
  343. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/multi_agent/__init__.py +0 -0
  344. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/multi_agent/test_agent_quirks.py +0 -0
  345. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/multi_agent/test_git_continuity_spine.py +0 -0
  346. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_cigs_hook_flow.py +0 -0
  347. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_cigs_integration.py +0 -0
  348. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_cigs_learning.py +0 -0
  349. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_complexity_assessment.py +0 -0
  350. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_dashboard_spawner_display.py +0 -0
  351. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_delegation_events.py +0 -0
  352. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_deployment_workflow.py +0 -0
  353. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_discoverability.py +0 -0
  354. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_edge_index_bug.py +0 -0
  355. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_features.py +0 -0
  356. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_handoff_routing.py +0 -0
  357. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_multi_agent_coordination.py +0 -0
  358. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_new_features.py +0 -0
  359. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_orchestration_tab.py +0 -0
  360. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_orchestration_with_playwright.py +0 -0
  361. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_orchestrator_pattern.py +0 -0
  362. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_orchestrator_spawner_delegation.py +0 -0
  363. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_phase1_userquery.py +0 -0
  364. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_phase4_delegation_events.py +0 -0
  365. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_post_compact_delegation.py +0 -0
  366. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_real_workitem_integration.py +0 -0
  367. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_redesigned_dashboard.py +0 -0
  368. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_spawner_integration.py +0 -0
  369. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_spawner_live_events.py +0 -0
  370. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_spawner_observability_e2e.py +0 -0
  371. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_spawner_routing_live.py +0 -0
  372. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_spawner_tool_tracking.py +0 -0
  373. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_task_delegation.py +0 -0
  374. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_user_query_events.py +0 -0
  375. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_websocket_realtime.py +0 -0
  376. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/integration/test_websocket_streaming.py +0 -0
  377. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/js/README.md +0 -0
  378. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/js/test_htmlgraph.html +0 -0
  379. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/manual/test-hook-input.py +0 -0
  380. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/operations/__init__.py +0 -0
  381. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/operations/test_hooks.py +0 -0
  382. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/operations/test_server.py +0 -0
  383. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/__init__.py +0 -0
  384. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/conftest.py +0 -0
  385. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_activity_feed_ui.py +0 -0
  386. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_agent_attribution.py +0 -0
  387. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_agent_detection.py +0 -0
  388. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_analytics.py +0 -0
  389. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_archive_manager.py +0 -0
  390. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_archive_search.py +0 -0
  391. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_atomic_ops.py +0 -0
  392. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_auto_spike.py +0 -0
  393. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_cigs_pretool_enforcer.py +0 -0
  394. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_claiming.py +0 -0
  395. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_cli_commands.py +0 -0
  396. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_cli_pydantic_models.py +0 -0
  397. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_cli_rich_output.py +0 -0
  398. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_collection_filter.py +0 -0
  399. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_cost_analyzer.py +0 -0
  400. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_cross_agent_attribution.py +0 -0
  401. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_cross_session_analytics.py +0 -0
  402. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_dashboard_attribution.py +0 -0
  403. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_dashboard_ui.py +0 -0
  404. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_delegation_fk_fix.py +0 -0
  405. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_delete.py +0 -0
  406. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_deploy.py +0 -0
  407. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_drift_parent_activity.py +0 -0
  408. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_drift_queue_cleanup.py +0 -0
  409. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_edge_index.py +0 -0
  410. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_error_handling.py +0 -0
  411. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_event_index.py +0 -0
  412. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_event_query.py +0 -0
  413. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_event_tracing.py +0 -0
  414. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_feature_track_linkage_phase1.py +0 -0
  415. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_find_api.py +0 -0
  416. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_git_events.py +0 -0
  417. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_graph_traversal.py +0 -0
  418. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_handoff.py +0 -0
  419. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_headless_spawner.py +0 -0
  420. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_headless_spawner_parent_session.py +0 -0
  421. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_ids.py +0 -0
  422. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_install_hooks.py +0 -0
  423. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_lifecycle.py +0 -0
  424. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_mcp_server.py +0 -0
  425. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_mcp_stdio_transport.py +0 -0
  426. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_models.py +0 -0
  427. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_orchestration.py +0 -0
  428. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_orchestrator_circuit_breaker.py +0 -0
  429. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_orchestrator_cli.py +0 -0
  430. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_orchestrator_enforce_hook.py +0 -0
  431. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_orchestrator_mode.py +0 -0
  432. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_parent_child_event_linking.py +0 -0
  433. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_parent_child_linking.py +0 -0
  434. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_parent_linking_integration.py +0 -0
  435. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_pattern_storage.py +0 -0
  436. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_plugin_update_preservation.py +0 -0
  437. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_post_tool_use_failure.py +0 -0
  438. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_post_tool_use_handler.py +0 -0
  439. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_posttooluse_cigs.py +0 -0
  440. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_pre_commit_hooks.py +0 -0
  441. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_pre_work_validation_integration.py +0 -0
  442. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_quality_gates.py +0 -0
  443. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_query_builder.py +0 -0
  444. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_query_cache.py +0 -0
  445. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_query_compilation.py +0 -0
  446. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_reflection.py +0 -0
  447. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_repo_hash.py +0 -0
  448. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_routing.py +0 -0
  449. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_sdk_discoverability.py +0 -0
  450. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_sdk_get_active_work_item.py +0 -0
  451. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_sdk_parent_session.py +0 -0
  452. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_sdk_sqlite_integration.py +0 -0
  453. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_session_cleanup.py +0 -0
  454. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_session_continuity.py +0 -0
  455. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_session_integration.py +0 -0
  456. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_session_registry.py +0 -0
  457. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_session_start_cigs.py +0 -0
  458. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_session_start_info_validation.py +0 -0
  459. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_session_state_manager.py +0 -0
  460. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_spawner_agents.py +0 -0
  461. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_spawner_routing.py +0 -0
  462. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_sqlite_schema.py +0 -0
  463. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_stop_cigs.py +0 -0
  464. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_system_overhead_drift.py +0 -0
  465. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_template_system.py +0 -0
  466. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_todo_collection.py +0 -0
  467. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_traces_collection.py +0 -0
  468. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_track_loading.py +0 -0
  469. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_transcript_linking.py +0 -0
  470. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_update_preserves_incoming_edges.py +0 -0
  471. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_user_prompt_submit_cigs.py +0 -0
  472. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_validate_work_hook.py +0 -0
  473. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_version_migration.py +0 -0
  474. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_violation_tracker.py +0 -0
  475. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_work_queue.py +0 -0
  476. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/python/test_work_type.py +0 -0
  477. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/test_agent_routing.py +0 -0
  478. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/test_autonomy_recommender.py +0 -0
  479. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/test_cigs_cli.py +0 -0
  480. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/test_cigs_cost_calculator.py +0 -0
  481. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/test_cigs_cost_reporter.py +0 -0
  482. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/test_cigs_imperative_messages.py +0 -0
  483. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/test_cigs_messages_basic.py +0 -0
  484. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/test_cli_output_snapshots.py +0 -0
  485. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/test_cli_sdk_parity.py +0 -0
  486. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/test_deployment_models.py +0 -0
  487. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/test_event_log.py +0 -0
  488. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/test_hybrid_event_capture.py +0 -0
  489. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/test_orchestrator_config.py +0 -0
  490. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/test_orchestrator_validator.py +0 -0
  491. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/test_pattern_detector.py +0 -0
  492. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/test_sdk_api_surface.py +0 -0
  493. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/test_sdk_operations.py +0 -0
  494. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/test_transaction_snapshot.py +0 -0
  495. {htmlgraph-0.26.6 → htmlgraph-0.26.8}/tests/test_transcript.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: htmlgraph
3
- Version: 0.26.6
3
+ Version: 0.26.8
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,6 +1,6 @@
1
1
  {
2
2
  "name": "htmlgraph",
3
- "version": "0.26.6",
3
+ "version": "0.26.8",
4
4
  "description": "HtmlGraph session tracking and documentation for Gemini CLI. Ensures proper activity attribution, feature awareness, and continuous work tracking.",
5
5
  "author": "Shakes",
6
6
  "license": "MIT",
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "htmlgraph"
3
- version = "0.26.6"
3
+ version = "0.26.8"
4
4
  description = "HTML is All You Need - Graph database on web standards"
5
5
  authors = [{name = "Shakes", email = "shakestzd@gmail.com"}]
6
6
  readme = "README.md"
@@ -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.6"
98
+ __version__ = "0.26.8"
99
99
  __all__ = [
100
100
  # Exceptions
101
101
  "HtmlGraphError",
@@ -353,6 +353,7 @@ def detect_model_from_hook_input(hook_input: dict[str, Any]) -> str | None:
353
353
  1. Task() model parameter (if tool_name == 'Task')
354
354
  2. HTMLGRAPH_MODEL environment variable (set by hooks)
355
355
  3. ANTHROPIC_MODEL or CLAUDE_MODEL environment variables
356
+ 4. Status line cache (for orchestrator tool calls)
356
357
 
357
358
  Args:
358
359
  hook_input: Hook input dict containing tool_name and tool_input
@@ -386,6 +387,14 @@ def detect_model_from_hook_input(hook_input: dict[str, Any]) -> str | None:
386
387
  if model:
387
388
  return model
388
389
 
390
+ # 3. Fallback to status line cache for orchestrator's own tool calls
391
+ # This gives regular tool calls (Bash, Read, etc.) the model of the orchestrator
392
+ session_id = hook_input.get("session_id") or hook_input.get("sessionId")
393
+ if session_id:
394
+ model_from_cache = get_model_from_status_cache(session_id)
395
+ if model_from_cache:
396
+ return model_from_cache
397
+
389
398
  return None
390
399
 
391
400
 
@@ -447,7 +456,10 @@ def detect_agent_from_environment() -> tuple[str, str | None]:
447
456
 
448
457
 
449
458
  def detect_subagent_context_from_database(
450
- db: HtmlGraphDB, current_session_id: str
459
+ db: HtmlGraphDB,
460
+ current_session_id: str,
461
+ parent_event_id_hint: str | None = None,
462
+ current_tool_name: str | None = None,
451
463
  ) -> tuple[str | None, str | None, str | None]:
452
464
  """
453
465
  Detect if we're in a subagent context by checking for active task_delegation events.
@@ -456,28 +468,124 @@ def detect_subagent_context_from_database(
456
468
  environment variables set by PreToolUse hooks in the parent process do NOT propagate
457
469
  to subagent processes spawned by Claude Code's Task() tool.
458
470
 
459
- Strategy:
460
- 1. Query for task_delegation events with status='started' (not yet completed)
461
- 2. If found within the last 5 minutes, we're likely in a subagent context
462
- 3. Return the subagent_type and parent session info
471
+ IMPORTANT CONTEXT:
472
+ - Claude Code passes the SAME session_id to both parent and subagent hooks
473
+ - Environment variables set in hooks don't persist (each hook is a new subprocess)
474
+ - The only way to detect subagent context is through database state
475
+
476
+ DETECTION STRATEGY:
477
+ - If there's an active task_delegation (status='started') within the time window,
478
+ AND the current tool is NOT the Task tool itself (to avoid self-detection),
479
+ then we're likely in a subagent context.
480
+ - The Task tool check is critical: when PostToolUse fires for the Task tool itself,
481
+ we should NOT consider ourselves in a subagent context - we're the orchestrator
482
+ that just finished delegating.
483
+
484
+ Strategy (in order of precedence):
485
+ 1. If parent_event_id_hint is provided, look up that specific event directly
486
+ 2. Otherwise, query for task_delegation events with status='started' (fallback)
487
+ 3. If found within the last 5 minutes AND current tool is not Task, we're in subagent context
488
+ 4. Return the subagent_type and parent session info
463
489
 
464
490
  Args:
465
491
  db: HtmlGraphDB instance
466
492
  current_session_id: The session_id from hook_input (Claude Code's session ID)
493
+ parent_event_id_hint: Optional event_id from environment variable for direct lookup.
494
+ This is the preferred method when available, as it correctly
495
+ handles parallel Task() calls.
496
+ current_tool_name: The tool being executed. If "Task", we skip subagent detection
497
+ to avoid the orchestrator thinking it's a subagent.
467
498
 
468
499
  Returns:
469
500
  Tuple of (subagent_type, parent_session_id, parent_event_id)
470
501
  All None if not in subagent context
471
502
  """
503
+ # Skip detection if the current tool is Task - we're the orchestrator, not a subagent
504
+ if current_tool_name == "Task":
505
+ print(
506
+ "DEBUG detect_subagent_context_from_database: "
507
+ "Skipping detection for Task tool (we're the orchestrator)",
508
+ file=sys.stderr,
509
+ )
510
+ return None, None, None
472
511
  try:
473
512
  if db.connection is None:
474
513
  return None, None, None
475
514
 
476
515
  cursor = db.connection.cursor()
477
516
 
478
- # Query for active task_delegation events (started but not completed)
479
- # that were created in the last 5 minutes
480
- # Exclude events that belong to the current session (those are parent context, not subagent)
517
+ # Priority 1: Direct lookup using parent_event_id_hint (handles parallel tasks correctly)
518
+ if parent_event_id_hint:
519
+ cursor.execute(
520
+ """
521
+ SELECT event_id, session_id, subagent_type, timestamp
522
+ FROM agent_events
523
+ WHERE event_id = ?
524
+ AND event_type = 'task_delegation'
525
+ AND status = 'started'
526
+ """,
527
+ (parent_event_id_hint,),
528
+ )
529
+ row = cursor.fetchone()
530
+
531
+ if row:
532
+ parent_event_id = row[0]
533
+ parent_session_id = row[1]
534
+ subagent_type = row[2] or "general-purpose"
535
+
536
+ print(
537
+ f"Debug: Detected subagent context via hint: "
538
+ f"type={subagent_type}, parent_session={parent_session_id}, "
539
+ f"parent_event={parent_event_id}",
540
+ file=sys.stderr,
541
+ )
542
+
543
+ return subagent_type, parent_session_id, parent_event_id
544
+
545
+ # Hint provided but event not found or not in 'started' status
546
+ # This can happen if the event was already completed
547
+ print(
548
+ f"Debug: Parent event hint '{parent_event_id_hint}' not found or not active",
549
+ file=sys.stderr,
550
+ )
551
+
552
+ # Priority 2: Fallback to most recent active task_delegation
553
+ # WARNING: This can pick the wrong parent when multiple Task() calls run in parallel!
554
+ # This is kept as a fallback for cases where environment variables don't propagate.
555
+ #
556
+ # IMPORTANT: We previously had `AND session_id != ?` to exclude the current session,
557
+ # but this was WRONG. Claude Code passes the SAME session_id to subagent hooks as
558
+ # to the parent session. So we need to find task_delegation events from the SAME
559
+ # session that are in 'started' status (not yet completed).
560
+ #
561
+ # The key insight: when a subagent runs, the task_delegation event from the parent
562
+ # is ALREADY in the database with status='started'. We just need to find it.
563
+ print(
564
+ f"DEBUG detect_subagent_context_from_database: "
565
+ f"Querying for task_delegation events in session {current_session_id}",
566
+ file=sys.stderr,
567
+ )
568
+
569
+ # First, let's see what task_delegation events exist at all (debug)
570
+ cursor.execute(
571
+ """
572
+ SELECT event_id, session_id, subagent_type, status, timestamp
573
+ FROM agent_events
574
+ WHERE event_type = 'task_delegation'
575
+ ORDER BY timestamp DESC
576
+ LIMIT 5
577
+ """
578
+ )
579
+ debug_rows = cursor.fetchall()
580
+ print(
581
+ f"DEBUG detect_subagent_context_from_database: "
582
+ f"Recent task_delegation events: {debug_rows}",
583
+ file=sys.stderr,
584
+ )
585
+
586
+ # Query for active task_delegation in the SAME session (or any session within time window)
587
+ # The subagent may have the same session_id as parent, so we look for ANY active
588
+ # task_delegation within the time window. The most recent one is likely our parent.
481
589
  cursor.execute(
482
590
  """
483
591
  SELECT event_id, session_id, subagent_type, timestamp
@@ -485,13 +593,16 @@ def detect_subagent_context_from_database(
485
593
  WHERE event_type = 'task_delegation'
486
594
  AND status = 'started'
487
595
  AND timestamp >= datetime('now', '-5 minutes')
488
- AND session_id != ?
489
596
  ORDER BY timestamp DESC
490
597
  LIMIT 1
491
- """,
492
- (current_session_id,),
598
+ """
493
599
  )
494
600
  row = cursor.fetchone()
601
+ print(
602
+ f"DEBUG detect_subagent_context_from_database: "
603
+ f"Fallback query result: {row}",
604
+ file=sys.stderr,
605
+ )
495
606
 
496
607
  if row:
497
608
  parent_event_id = row[0]
@@ -499,7 +610,7 @@ def detect_subagent_context_from_database(
499
610
  subagent_type = row[2] or "general-purpose"
500
611
 
501
612
  print(
502
- f"Debug: Detected subagent context from database: "
613
+ f"Debug: Detected subagent context from database (fallback): "
503
614
  f"type={subagent_type}, parent_session={parent_session_id}, "
504
615
  f"parent_event={parent_event_id}",
505
616
  file=sys.stderr,
@@ -751,6 +862,24 @@ def track_event(hook_type: str, hook_input: dict[str, Any]) -> dict[str, Any]:
751
862
  Returns:
752
863
  Response dict with {"continue": True} and optional hookSpecificOutput
753
864
  """
865
+ # Check for debug mode (set HTMLGRAPH_DEBUG=1 to enable verbose logging)
866
+ debug_mode = os.environ.get("HTMLGRAPH_DEBUG") == "1"
867
+
868
+ if debug_mode:
869
+ print(
870
+ f"DEBUG track_event: hook_type={hook_type}, "
871
+ f"session_id={hook_input.get('session_id')}, "
872
+ f"tool_name={hook_input.get('tool_name', hook_input.get('name', 'unknown'))}",
873
+ file=sys.stderr,
874
+ )
875
+ print(
876
+ f"DEBUG track_event: ENV HTMLGRAPH_PARENT_EVENT="
877
+ f"{os.environ.get('HTMLGRAPH_PARENT_EVENT')}, "
878
+ f"HTMLGRAPH_SUBAGENT_TYPE={os.environ.get('HTMLGRAPH_SUBAGENT_TYPE')}, "
879
+ f"HTMLGRAPH_PARENT_SESSION={os.environ.get('HTMLGRAPH_PARENT_SESSION')}",
880
+ file=sys.stderr,
881
+ )
882
+
754
883
  cwd = hook_input.get("cwd")
755
884
  project_dir = resolve_project_path(cwd if cwd else None)
756
885
  graph_dir = Path(project_dir) / ".htmlgraph"
@@ -791,34 +920,106 @@ def track_event(hook_type: str, hook_input: dict[str, Any]) -> dict[str, Any]:
791
920
  hook_session_id = hook_input.get("session_id") or hook_input.get("sessionId")
792
921
 
793
922
  # Check if we're in a subagent context using multiple methods:
923
+ #
924
+ # PRECEDENCE ORDER (fixes parallel Task() bug):
925
+ # 1. Environment variables - most reliable when available, correctly identifies
926
+ # the specific parent event even with multiple parallel Task() calls
927
+ # 2. Database with hint - uses env var as hint for direct lookup
928
+ # 3. Database fallback - picks most recent (WARNING: wrong for parallel tasks!)
929
+ #
794
930
  # Method 1: Environment variables (works if Task() spawner sets them)
795
931
  subagent_type = os.environ.get("HTMLGRAPH_SUBAGENT_TYPE")
796
932
  parent_session_id = os.environ.get("HTMLGRAPH_PARENT_SESSION")
933
+ env_parent_event_id = os.environ.get("HTMLGRAPH_PARENT_EVENT")
934
+
935
+ # DEBUG: Log subagent detection attempt
936
+ print(
937
+ f"DEBUG subagent detection: "
938
+ f"env subagent_type={subagent_type}, "
939
+ f"env parent_session_id={parent_session_id}, "
940
+ f"env parent_event_id={env_parent_event_id}",
941
+ file=sys.stderr,
942
+ )
943
+
944
+ # If we have parent event from environment, use it directly
945
+ if env_parent_event_id:
946
+ parent_event_id_for_session = env_parent_event_id
947
+ print(
948
+ f"Debug: Using environment variable for parent event: {env_parent_event_id}",
949
+ file=sys.stderr,
950
+ )
797
951
 
798
952
  # Method 2: Database-based detection (CRITICAL for Claude Code Task() tool)
799
- # Environment variables don't propagate to subagent processes, so we check
800
- # the database for active task_delegation events
953
+ # Environment variables may not propagate to subagent processes, so we check
954
+ # the database for active task_delegation events.
955
+ # IMPORTANT: Pass env_parent_event_id as hint to handle parallel Task() correctly
956
+ # Get the current tool name for subagent detection
957
+ current_tool_name = hook_input.get("tool_name") or hook_input.get("name")
958
+
959
+ print(
960
+ f"DEBUG db detection: will_check={not subagent_type and db and hook_session_id}, "
961
+ f"subagent_type={subagent_type}, db={db is not None}, hook_session_id={hook_session_id}, "
962
+ f"current_tool_name={current_tool_name}",
963
+ file=sys.stderr,
964
+ )
801
965
  if not subagent_type and db and hook_session_id:
966
+ print(
967
+ f"DEBUG db detection: calling detect_subagent_context_from_database "
968
+ f"with current_session_id={hook_session_id}, hint={env_parent_event_id}, "
969
+ f"current_tool_name={current_tool_name}",
970
+ file=sys.stderr,
971
+ )
802
972
  db_subagent_type, db_parent_session_id, db_parent_event_id = (
803
- detect_subagent_context_from_database(db, hook_session_id)
973
+ detect_subagent_context_from_database(
974
+ db,
975
+ hook_session_id,
976
+ parent_event_id_hint=env_parent_event_id,
977
+ current_tool_name=current_tool_name,
978
+ )
979
+ )
980
+ print(
981
+ f"DEBUG db detection result: "
982
+ f"db_subagent_type={db_subagent_type}, "
983
+ f"db_parent_session_id={db_parent_session_id}, "
984
+ f"db_parent_event_id={db_parent_event_id}",
985
+ file=sys.stderr,
804
986
  )
805
987
  if db_subagent_type:
806
988
  subagent_type = db_subagent_type
807
989
  parent_session_id = db_parent_session_id
808
- parent_event_id_for_session = db_parent_event_id
990
+ # Only update parent_event_id if not already set from env
991
+ if not parent_event_id_for_session:
992
+ parent_event_id_for_session = db_parent_event_id
809
993
  print(
810
994
  f"Debug: Using database-based subagent detection: "
811
- f"type={subagent_type}, parent={parent_session_id}",
995
+ f"type={subagent_type}, parent={parent_session_id}, "
996
+ f"parent_event={parent_event_id_for_session}",
812
997
  file=sys.stderr,
813
998
  )
814
999
 
1000
+ # DEBUG: Log subagent context decision
1001
+ print(
1002
+ f"DEBUG subagent context decision: "
1003
+ f"subagent_type={subagent_type}, parent_session_id={parent_session_id}, "
1004
+ f"will_create_subagent_session={bool(subagent_type and parent_session_id)}",
1005
+ file=sys.stderr,
1006
+ )
1007
+
815
1008
  if subagent_type and parent_session_id:
816
1009
  # We're in a subagent context
817
1010
  is_subagent_session = True
1011
+ print(
1012
+ "DEBUG: SUBAGENT CONTEXT DETECTED! Creating subagent session...",
1013
+ file=sys.stderr,
1014
+ )
818
1015
 
819
1016
  # Use Claude's session_id (hook_session_id) as the subagent session ID
820
1017
  # This ensures events are properly tracked to this session
821
1018
  subagent_session_id = hook_session_id or f"{parent_session_id}-{subagent_type}"
1019
+ print(
1020
+ f"DEBUG: subagent_session_id={subagent_session_id}",
1021
+ file=sys.stderr,
1022
+ )
822
1023
 
823
1024
  # Check if session already exists in our system
824
1025
  existing = manager.session_converter.load(subagent_session_id)
@@ -831,6 +1032,11 @@ def track_event(hook_type: str, hook_input: dict[str, Any]) -> dict[str, Any]:
831
1032
  else:
832
1033
  # Create new subagent session with parent link
833
1034
  try:
1035
+ print(
1036
+ f"DEBUG: Creating NEW subagent session with is_subagent=True, "
1037
+ f"parent_session_id={parent_session_id}",
1038
+ file=sys.stderr,
1039
+ )
834
1040
  active_session = manager.start_session(
835
1041
  session_id=subagent_session_id,
836
1042
  agent=f"{subagent_type}-spawner",
@@ -35,12 +35,61 @@ def get_parent_event_id() -> str | None:
35
35
 
36
36
  Set by PreToolUse hook when Task() is detected.
37
37
 
38
+ NOTE: This relies on environment variables which DON'T persist between
39
+ hook invocations (each hook is a new subprocess). This function is kept
40
+ for backward compatibility but will almost always return None.
41
+ Use get_parent_event_id_from_database() instead.
42
+
38
43
  Returns:
39
44
  Parent event ID (evt-XXXXX) or None if not found
40
45
  """
41
46
  return os.environ.get("HTMLGRAPH_PARENT_EVENT")
42
47
 
43
48
 
49
+ def get_parent_event_id_from_database(db_path: str) -> tuple[str | None, str | None]:
50
+ """
51
+ Get the parent event ID by querying the database for active task_delegation events.
52
+
53
+ This is the reliable method for finding parent events since environment variables
54
+ don't persist between hook invocations.
55
+
56
+ Args:
57
+ db_path: Path to SQLite database
58
+
59
+ Returns:
60
+ Tuple of (parent_event_id, parent_start_time) or (None, None) if not found
61
+ """
62
+ try:
63
+ conn = sqlite3.connect(db_path)
64
+ cursor = conn.cursor()
65
+
66
+ # Find the most recent task_delegation event that's still 'started'
67
+ cursor.execute(
68
+ """
69
+ SELECT event_id, timestamp
70
+ FROM agent_events
71
+ WHERE event_type = 'task_delegation'
72
+ AND status = 'started'
73
+ AND timestamp >= datetime('now', '-10 minutes')
74
+ ORDER BY timestamp DESC
75
+ LIMIT 1
76
+ """
77
+ )
78
+ row = cursor.fetchone()
79
+ conn.close()
80
+
81
+ if row:
82
+ logger.debug(f"Found active task_delegation from database: {row[0]}")
83
+ return row[0], row[1]
84
+
85
+ logger.debug("No active task_delegation found in database")
86
+ return None, None
87
+
88
+ except Exception as e:
89
+ logger.warning(f"Error querying database for parent event: {e}")
90
+ return None, None
91
+
92
+
44
93
  def get_session_id() -> str | None:
45
94
  """
46
95
  Get the current session ID from environment.
@@ -222,14 +271,7 @@ def handle_subagent_stop(hook_input: dict[str, Any]) -> dict[str, Any]:
222
271
  Returns:
223
272
  Response: {"continue": True} with optional context
224
273
  """
225
- # Get parent event ID from environment
226
- parent_event_id = get_parent_event_id()
227
-
228
- if not parent_event_id:
229
- logger.debug("No parent event ID found, skipping subagent stop tracking")
230
- return {"continue": True}
231
-
232
- # Get project directory and database path
274
+ # Get project directory and database path first (needed for database-based detection)
233
275
  try:
234
276
  from htmlgraph.config import get_database_path
235
277
 
@@ -244,12 +286,29 @@ def handle_subagent_stop(hook_input: dict[str, Any]) -> dict[str, Any]:
244
286
  logger.warning(f"Error resolving database path: {e}")
245
287
  return {"continue": True}
246
288
 
247
- # Get parent event start time
248
- parent_start_time = get_parent_event_start_time(db_path, parent_event_id)
249
- if not parent_start_time:
250
- logger.warning(f"Could not find parent event: {parent_event_id}")
289
+ # Try environment variable first (unlikely to work, but kept for compatibility)
290
+ parent_event_id = get_parent_event_id()
291
+ parent_start_time = None
292
+
293
+ # Fall back to database-based detection (the reliable method)
294
+ if not parent_event_id:
295
+ parent_event_id, parent_start_time = get_parent_event_id_from_database(db_path)
296
+
297
+ if not parent_event_id:
298
+ logger.debug(
299
+ "No parent event ID found (env or database), skipping subagent stop tracking"
300
+ )
251
301
  return {"continue": True}
252
302
 
303
+ logger.info(f"SubagentStop: Found parent event {parent_event_id}")
304
+
305
+ # Get parent event start time if not already retrieved from database
306
+ if not parent_start_time:
307
+ parent_start_time = get_parent_event_start_time(db_path, parent_event_id)
308
+ if not parent_start_time:
309
+ logger.warning(f"Could not find parent event start time: {parent_event_id}")
310
+ return {"continue": True}
311
+
253
312
  # Count child spikes
254
313
  child_spike_count = count_child_spikes(db_path, parent_event_id, parent_start_time)
255
314