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