htmlgraph 0.26.13__tar.gz → 0.26.15__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 (499) hide show
  1. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/PKG-INFO +1 -1
  2. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/packages/gemini-extension/gemini-extension.json +1 -1
  3. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/pyproject.toml +1 -1
  4. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/__init__.py +1 -1
  5. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/analytics/__init__.py +6 -1
  6. htmlgraph-0.26.15/src/python/htmlgraph/analytics/cost_analyzer.py +387 -0
  7. htmlgraph-0.26.15/src/python/htmlgraph/analytics/cost_reporter.py +675 -0
  8. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/cli/.htmlgraph/.session-warning-state.json +1 -1
  9. htmlgraph-0.26.15/src/python/htmlgraph/cli/.htmlgraph/htmlgraph.db +0 -0
  10. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/cli/analytics.py +19 -0
  11. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/db/schema.py +108 -2
  12. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/hooks/event_tracker.py +11 -0
  13. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/sdk.py +100 -0
  14. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/test_copilot_spawner_tracking.py +1 -1
  15. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/test_discoverability.py +7 -2
  16. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/test_orchestrator_spawner_delegation.py +7 -0
  17. htmlgraph-0.26.13/src/python/htmlgraph/cli/.htmlgraph/htmlgraph.db +0 -0
  18. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/.gitignore +0 -0
  19. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/README.md +0 -0
  20. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/agent-coordination/README.md +0 -0
  21. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/agent-coordination/demo.py +0 -0
  22. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/create_auth_track_demo.py +0 -0
  23. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/create_htmlgraph_dev_track.py +0 -0
  24. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/demo_agent_planning.py +0 -0
  25. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/demo_real_project_analytics.py +0 -0
  26. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/demo_sdk_operations.py +0 -0
  27. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/documentation-site/README.md +0 -0
  28. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/documentation-site/agents.json +0 -0
  29. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/documentation-site/demo.py +0 -0
  30. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/documentation-site/features/doc-api-graph.html +0 -0
  31. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/documentation-site/features/doc-api-overview.html +0 -0
  32. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/documentation-site/features/doc-api-sdk.html +0 -0
  33. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/documentation-site/features/doc-example-advanced.html +0 -0
  34. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/documentation-site/features/doc-example-basic.html +0 -0
  35. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/documentation-site/features/doc-index.html +0 -0
  36. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/documentation-site/features/doc-installation.html +0 -0
  37. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/documentation-site/features/doc-quickstart.html +0 -0
  38. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/example_query_compilation.py +0 -0
  39. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/handoff-demo.py +0 -0
  40. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/knowledge-base/README.md +0 -0
  41. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/knowledge-base/agents.json +0 -0
  42. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/knowledge-base/demo.py +0 -0
  43. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/knowledge-base/features/feat-276c615f.html +0 -0
  44. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/knowledge-base/features/feat-7a6f797d.html +0 -0
  45. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/knowledge-base/features/note-ai-agents.html +0 -0
  46. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/knowledge-base/features/note-graph-db.html +0 -0
  47. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/knowledge-base/features/note-htmlgraph.html +0 -0
  48. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/knowledge-base/features/note-web-standards.html +0 -0
  49. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/parallel_task_coordination.py +0 -0
  50. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/routing-demo.py +0 -0
  51. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/sdk_demo.py +0 -0
  52. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/todo-list/README.md +0 -0
  53. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/todo-list/demo.py +0 -0
  54. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/todo-list/index.html +0 -0
  55. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/todo-list/styles.css +0 -0
  56. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/todo-list/task-001.html +0 -0
  57. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/todo-list/task-002.html +0 -0
  58. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/todo-list/task-003.html +0 -0
  59. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/todo-list/task-004.html +0 -0
  60. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/todo-list/task-005.html +0 -0
  61. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/examples/todo-list/task-006.html +0 -0
  62. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/packages/gemini-extension/GEMINI.md +0 -0
  63. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/packages/gemini-extension/README.md +0 -0
  64. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/packages/gemini-extension/command_deploy.md +0 -0
  65. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/packages/gemini-extension/command_end.md +0 -0
  66. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/packages/gemini-extension/command_feature-add.md +0 -0
  67. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/packages/gemini-extension/command_feature-complete.md +0 -0
  68. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/packages/gemini-extension/command_feature-primary.md +0 -0
  69. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/packages/gemini-extension/command_feature-start.md +0 -0
  70. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/packages/gemini-extension/command_git-commit.md +0 -0
  71. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/packages/gemini-extension/command_help.md +0 -0
  72. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/packages/gemini-extension/command_init.md +0 -0
  73. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/packages/gemini-extension/command_plan.md +0 -0
  74. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/packages/gemini-extension/command_recommend.md +0 -0
  75. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/packages/gemini-extension/command_serve.md +0 -0
  76. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/packages/gemini-extension/command_spike.md +0 -0
  77. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/packages/gemini-extension/command_start.md +0 -0
  78. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/packages/gemini-extension/command_status.md +0 -0
  79. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/packages/gemini-extension/command_track.md +0 -0
  80. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/packages/gemini-extension/hooks/hooks.json +0 -0
  81. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/packages/gemini-extension/hooks/scripts/post-tool.sh +0 -0
  82. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/packages/gemini-extension/hooks/scripts/session-end.sh +0 -0
  83. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/packages/gemini-extension/hooks/scripts/session-start.sh +0 -0
  84. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/js/htmlgraph.js +0 -0
  85. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/.htmlgraph/.session-warning-state.json +0 -0
  86. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/.htmlgraph/agents.json +0 -0
  87. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/.htmlgraph/htmlgraph.db +0 -0
  88. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/agent_detection.py +0 -0
  89. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/agent_registry.py +0 -0
  90. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/agents.py +0 -0
  91. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/analytics/cli.py +0 -0
  92. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/analytics/cross_session.py +0 -0
  93. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/analytics/dependency.py +0 -0
  94. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/analytics/work_type.py +0 -0
  95. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/analytics_index.py +0 -0
  96. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/api/__init__.py +0 -0
  97. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/api/main.py +0 -0
  98. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/api/static/htmx.min.js +0 -0
  99. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/api/static/style-redesign.css +0 -0
  100. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/api/static/style.css +0 -0
  101. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/api/templates/dashboard-redesign.html +0 -0
  102. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/api/templates/dashboard.html +0 -0
  103. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/api/templates/partials/activity-feed-hierarchical.html +0 -0
  104. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/api/templates/partials/activity-feed.html +0 -0
  105. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/api/templates/partials/agents-redesign.html +0 -0
  106. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/api/templates/partials/agents.html +0 -0
  107. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/api/templates/partials/event-traces.html +0 -0
  108. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/api/templates/partials/features-kanban-redesign.html +0 -0
  109. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/api/templates/partials/features.html +0 -0
  110. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/api/templates/partials/metrics-redesign.html +0 -0
  111. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/api/templates/partials/metrics.html +0 -0
  112. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/api/templates/partials/orchestration-redesign.html +0 -0
  113. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/api/templates/partials/orchestration.html +0 -0
  114. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/api/templates/partials/spawners.html +0 -0
  115. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/archive/__init__.py +0 -0
  116. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/archive/bloom.py +0 -0
  117. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/archive/fts.py +0 -0
  118. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/archive/manager.py +0 -0
  119. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/archive/search.py +0 -0
  120. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/atomic_ops.py +0 -0
  121. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/attribute_index.py +0 -0
  122. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/builders/__init__.py +0 -0
  123. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/builders/base.py +0 -0
  124. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/builders/bug.py +0 -0
  125. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/builders/chore.py +0 -0
  126. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/builders/epic.py +0 -0
  127. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/builders/feature.py +0 -0
  128. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/builders/insight.py +0 -0
  129. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/builders/metric.py +0 -0
  130. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/builders/pattern.py +0 -0
  131. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/builders/phase.py +0 -0
  132. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/builders/spike.py +0 -0
  133. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/builders/track.py +0 -0
  134. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/cigs/__init__.py +0 -0
  135. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/cigs/autonomy.py +0 -0
  136. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/cigs/cost.py +0 -0
  137. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/cigs/messages_basic.py +0 -0
  138. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/cigs/messaging.py +0 -0
  139. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/cigs/models.py +0 -0
  140. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/cigs/pattern_storage.py +0 -0
  141. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/cigs/patterns.py +0 -0
  142. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/cigs/posttool_analyzer.py +0 -0
  143. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/cigs/reporter.py +0 -0
  144. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/cigs/tracker.py +0 -0
  145. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/cli/.htmlgraph/agents.json +0 -0
  146. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/cli/__init__.py +0 -0
  147. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/cli/__main__.py +0 -0
  148. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/cli/base.py +0 -0
  149. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/cli/constants.py +0 -0
  150. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/cli/core.py +0 -0
  151. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/cli/main.py +0 -0
  152. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/cli/models.py +0 -0
  153. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/cli/templates/__init__.py +0 -0
  154. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/cli/templates/cost_dashboard.py +0 -0
  155. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/cli/work/__init__.py +0 -0
  156. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/cli/work/features.py +0 -0
  157. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/cli/work/orchestration.py +0 -0
  158. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/cli/work/sessions.py +0 -0
  159. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/cli/work/tracks.py +0 -0
  160. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/cli_commands/__init__.py +0 -0
  161. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/cli_commands/feature.py +0 -0
  162. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/cli_framework.py +0 -0
  163. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/collections/__init__.py +0 -0
  164. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/collections/base.py +0 -0
  165. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/collections/bug.py +0 -0
  166. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/collections/chore.py +0 -0
  167. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/collections/epic.py +0 -0
  168. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/collections/feature.py +0 -0
  169. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/collections/insight.py +0 -0
  170. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/collections/metric.py +0 -0
  171. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/collections/pattern.py +0 -0
  172. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/collections/phase.py +0 -0
  173. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/collections/session.py +0 -0
  174. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/collections/spike.py +0 -0
  175. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/collections/task_delegation.py +0 -0
  176. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/collections/todo.py +0 -0
  177. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/collections/traces.py +0 -0
  178. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/config.py +0 -0
  179. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/context_analytics.py +0 -0
  180. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/converter.py +0 -0
  181. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/cost_analysis/__init__.py +0 -0
  182. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/cost_analysis/analyzer.py +0 -0
  183. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/dashboard.html +0 -0
  184. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/dashboard.html.backup +0 -0
  185. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/dashboard.html.bak +0 -0
  186. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/dashboard.html.bak2 +0 -0
  187. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/dashboard.html.bak3 +0 -0
  188. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/db/__init__.py +0 -0
  189. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/db/queries.py +0 -0
  190. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/dependency_models.py +0 -0
  191. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/deploy.py +0 -0
  192. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/deployment_models.py +0 -0
  193. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/docs/API_REFERENCE.md +0 -0
  194. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/docs/HTTP_API.md +0 -0
  195. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/docs/INTEGRATION_GUIDE.md +0 -0
  196. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/docs/ORCHESTRATION_PATTERNS.md +0 -0
  197. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/docs/README.md +0 -0
  198. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/docs/__init__.py +0 -0
  199. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/docs/docs_version.py +0 -0
  200. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/docs/metadata.py +0 -0
  201. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/docs/migrations.py +0 -0
  202. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/docs/template_engine.py +0 -0
  203. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/docs/templates/_sections/cli_reference.md.j2 +0 -0
  204. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/docs/templates/_sections/core_concepts.md.j2 +0 -0
  205. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/docs/templates/_sections/sdk_basics.md.j2 +0 -0
  206. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/docs/templates/base_agents.md.j2 +0 -0
  207. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/docs/templates/example_user_override.md.j2 +0 -0
  208. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/docs/version_check.py +0 -0
  209. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/edge_index.py +0 -0
  210. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/error_handler.py +0 -0
  211. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/event_log.py +0 -0
  212. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/event_migration.py +0 -0
  213. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/exceptions.py +0 -0
  214. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/extensions/gemini/GEMINI.md +0 -0
  215. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/extensions/gemini/README.md +0 -0
  216. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/extensions/gemini/gemini-extension.json +0 -0
  217. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/extensions/gemini/hooks/hooks.json +0 -0
  218. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/extensions/gemini/hooks/scripts/post-tool.sh +0 -0
  219. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/extensions/gemini/hooks/scripts/session-end.sh +0 -0
  220. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/extensions/gemini/hooks/scripts/session-start.sh +0 -0
  221. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/file_watcher.py +0 -0
  222. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/find_api.py +0 -0
  223. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/git_events.py +0 -0
  224. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/graph.py +0 -0
  225. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/hooks/.htmlgraph/.session-warning-state.json +0 -0
  226. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/hooks/.htmlgraph/agents.json +0 -0
  227. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/hooks/.htmlgraph/index.sqlite +0 -0
  228. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/hooks/__init__.py +0 -0
  229. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/hooks/bootstrap.py +0 -0
  230. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/hooks/cigs_pretool_enforcer.py +0 -0
  231. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/hooks/concurrent_sessions.py +0 -0
  232. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/hooks/context.py +0 -0
  233. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/hooks/drift_handler.py +0 -0
  234. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/hooks/git_commands.py +0 -0
  235. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/hooks/hooks-config.example.json +0 -0
  236. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/hooks/installer.py +0 -0
  237. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/hooks/orchestrator.py +0 -0
  238. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/hooks/orchestrator_reflector.py +0 -0
  239. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/hooks/post-checkout.sh +0 -0
  240. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/hooks/post-commit.sh +0 -0
  241. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/hooks/post-merge.sh +0 -0
  242. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/hooks/post_tool_use_failure.py +0 -0
  243. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/hooks/post_tool_use_handler.py +0 -0
  244. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/hooks/posttooluse.py +0 -0
  245. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/hooks/pre-commit.sh +0 -0
  246. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/hooks/pre-push.sh +0 -0
  247. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/hooks/pretooluse.py +0 -0
  248. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/hooks/prompt_analyzer.py +0 -0
  249. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/hooks/session_handler.py +0 -0
  250. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/hooks/session_summary.py +0 -0
  251. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/hooks/state_manager.py +0 -0
  252. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/hooks/subagent_detection.py +0 -0
  253. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/hooks/subagent_stop.py +0 -0
  254. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/hooks/task_enforcer.py +0 -0
  255. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/hooks/task_validator.py +0 -0
  256. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/hooks/validator.py +0 -0
  257. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/ids.py +0 -0
  258. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/index.d.ts +0 -0
  259. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/learning.py +0 -0
  260. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/mcp_server.py +0 -0
  261. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/models.py +0 -0
  262. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/operations/README.md +0 -0
  263. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/operations/__init__.py +0 -0
  264. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/operations/analytics.py +0 -0
  265. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/operations/events.py +0 -0
  266. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/operations/fastapi_server.py +0 -0
  267. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/operations/hooks.py +0 -0
  268. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/operations/initialization.py +0 -0
  269. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/operations/initialization.py.backup +0 -0
  270. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/operations/server.py +0 -0
  271. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/orchestration/__init__.py +0 -0
  272. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/orchestration/claude_launcher.py +0 -0
  273. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/orchestration/command_builder.py +0 -0
  274. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/orchestration/headless_spawner.py +0 -0
  275. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/orchestration/live_events.py +0 -0
  276. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/orchestration/model_selection.py +0 -0
  277. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/orchestration/plugin_manager.py +0 -0
  278. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/orchestration/prompts.py +0 -0
  279. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/orchestration/spawners/__init__.py +0 -0
  280. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/orchestration/spawners/base.py +0 -0
  281. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/orchestration/spawners/claude.py +0 -0
  282. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/orchestration/spawners/codex.py +0 -0
  283. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/orchestration/spawners/copilot.py +0 -0
  284. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/orchestration/spawners/gemini.py +0 -0
  285. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/orchestration/subprocess_runner.py +0 -0
  286. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/orchestration/task_coordination.py +0 -0
  287. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/orchestration.md +0 -0
  288. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/orchestrator-system-prompt-optimized.txt +0 -0
  289. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/orchestrator.py +0 -0
  290. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/orchestrator_config.py +0 -0
  291. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/orchestrator_mode.py +0 -0
  292. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/orchestrator_validator.py +0 -0
  293. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/parallel.py +0 -0
  294. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/parser.py +0 -0
  295. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/planning.py +0 -0
  296. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/pydantic_models.py +0 -0
  297. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/quality_gates.py +0 -0
  298. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/query_builder.py +0 -0
  299. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/reflection.py +0 -0
  300. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/repo_hash.py +0 -0
  301. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/routing.py +0 -0
  302. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/scripts/__init__.py +0 -0
  303. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/scripts/deploy.py +0 -0
  304. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/server.py +0 -0
  305. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/services/__init__.py +0 -0
  306. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/services/claiming.py +0 -0
  307. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/session_hooks.py +0 -0
  308. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/session_manager.py +0 -0
  309. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/session_registry.py +0 -0
  310. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/session_state.py +0 -0
  311. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/session_warning.py +0 -0
  312. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/setup.py +0 -0
  313. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/spike_index.py +0 -0
  314. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/styles.css +0 -0
  315. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/sync_docs.py +0 -0
  316. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/system_prompts.py +0 -0
  317. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/templates/AGENTS.md.template +0 -0
  318. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/templates/CLAUDE.md.template +0 -0
  319. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/templates/GEMINI.md.template +0 -0
  320. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/templates/orchestration-view.html +0 -0
  321. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/track_builder.py +0 -0
  322. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/track_manager.py +0 -0
  323. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/transcript.py +0 -0
  324. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/transcript_analytics.py +0 -0
  325. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/types.py +0 -0
  326. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/validation.py +0 -0
  327. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/watch.py +0 -0
  328. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/src/python/htmlgraph/work_type_utils.py +0 -0
  329. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/benchmarks/README.md +0 -0
  330. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/benchmarks/__init__.py +0 -0
  331. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/benchmarks/bench_graph.py +0 -0
  332. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/benchmarks/conftest.py +0 -0
  333. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/hooks/__init__.py +0 -0
  334. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/hooks/test_bootstrap.py +0 -0
  335. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/hooks/test_concurrent_sessions.py +0 -0
  336. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/hooks/test_context.py +0 -0
  337. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/hooks/test_event_tracker.py +0 -0
  338. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/hooks/test_git_commands.py +0 -0
  339. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/hooks/test_hybrid_event_capture.py +0 -0
  340. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/hooks/test_prompt_analyzer.py +0 -0
  341. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/hooks/test_session_handler.py +0 -0
  342. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/hooks/test_state_manager.py +0 -0
  343. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/hooks/test_system_prompt_persistence.py +0 -0
  344. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/hooks/test_system_prompt_persistence_integration.py +0 -0
  345. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/multi_agent/README.md +0 -0
  346. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/multi_agent/__init__.py +0 -0
  347. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/multi_agent/test_agent_quirks.py +0 -0
  348. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/multi_agent/test_git_continuity_spine.py +0 -0
  349. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/test_cigs_hook_flow.py +0 -0
  350. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/test_cigs_integration.py +0 -0
  351. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/test_cigs_learning.py +0 -0
  352. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/test_codex_spawner.py +0 -0
  353. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/test_complexity_assessment.py +0 -0
  354. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/test_dashboard_spawner_display.py +0 -0
  355. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/test_delegation_events.py +0 -0
  356. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/test_deployment_workflow.py +0 -0
  357. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/test_edge_index_bug.py +0 -0
  358. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/test_features.py +0 -0
  359. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/test_gemini_spawner_diagnosis.py +0 -0
  360. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/test_handoff_routing.py +0 -0
  361. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/test_multi_agent_coordination.py +0 -0
  362. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/test_new_features.py +0 -0
  363. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/test_orchestration_tab.py +0 -0
  364. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/test_orchestration_with_playwright.py +0 -0
  365. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/test_orchestrator_pattern.py +0 -0
  366. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/test_phase4_delegation_events.py +0 -0
  367. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/test_post_compact_delegation.py +0 -0
  368. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/test_real_workitem_integration.py +0 -0
  369. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/test_redesigned_dashboard.py +0 -0
  370. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/test_spawner_integration.py +0 -0
  371. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/test_spawner_live_events.py +0 -0
  372. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/test_spawner_observability_e2e.py +0 -0
  373. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/test_spawner_routing_live.py +0 -0
  374. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/test_spawner_tool_tracking.py +0 -0
  375. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/test_task_delegation.py +0 -0
  376. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/test_user_query_events.py +0 -0
  377. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/test_websocket_realtime.py +0 -0
  378. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/integration/test_websocket_streaming.py +0 -0
  379. /htmlgraph-0.26.13/tests/integration/test_phase1_userquery.py → /htmlgraph-0.26.15/tests/integration/verify_phase1_userquery.py +0 -0
  380. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/js/README.md +0 -0
  381. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/js/test_htmlgraph.html +0 -0
  382. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/manual/test-hook-input.py +0 -0
  383. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/operations/__init__.py +0 -0
  384. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/operations/test_hooks.py +0 -0
  385. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/operations/test_server.py +0 -0
  386. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/__init__.py +0 -0
  387. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/conftest.py +0 -0
  388. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_activity_feed_ui.py +0 -0
  389. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_agent_attribution.py +0 -0
  390. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_agent_detection.py +0 -0
  391. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_analytics.py +0 -0
  392. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_archive_manager.py +0 -0
  393. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_archive_search.py +0 -0
  394. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_atomic_ops.py +0 -0
  395. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_auto_spike.py +0 -0
  396. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_cigs_pretool_enforcer.py +0 -0
  397. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_claiming.py +0 -0
  398. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_cli_commands.py +0 -0
  399. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_cli_pydantic_models.py +0 -0
  400. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_cli_rich_output.py +0 -0
  401. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_collection_filter.py +0 -0
  402. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_cost_analyzer.py +0 -0
  403. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_cross_agent_attribution.py +0 -0
  404. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_cross_session_analytics.py +0 -0
  405. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_dashboard_attribution.py +0 -0
  406. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_dashboard_ui.py +0 -0
  407. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_delegation_fk_fix.py +0 -0
  408. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_delete.py +0 -0
  409. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_deploy.py +0 -0
  410. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_drift_parent_activity.py +0 -0
  411. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_drift_queue_cleanup.py +0 -0
  412. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_edge_index.py +0 -0
  413. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_error_handling.py +0 -0
  414. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_event_index.py +0 -0
  415. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_event_query.py +0 -0
  416. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_event_tracing.py +0 -0
  417. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_feature_track_linkage_phase1.py +0 -0
  418. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_find_api.py +0 -0
  419. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_git_events.py +0 -0
  420. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_graph_traversal.py +0 -0
  421. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_handoff.py +0 -0
  422. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_headless_spawner.py +0 -0
  423. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_headless_spawner_parent_session.py +0 -0
  424. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_ids.py +0 -0
  425. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_install_hooks.py +0 -0
  426. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_lifecycle.py +0 -0
  427. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_mcp_server.py +0 -0
  428. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_mcp_stdio_transport.py +0 -0
  429. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_models.py +0 -0
  430. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_orchestration.py +0 -0
  431. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_orchestrator_circuit_breaker.py +0 -0
  432. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_orchestrator_cli.py +0 -0
  433. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_orchestrator_enforce_hook.py +0 -0
  434. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_orchestrator_mode.py +0 -0
  435. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_parent_child_event_linking.py +0 -0
  436. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_parent_child_linking.py +0 -0
  437. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_parent_linking_integration.py +0 -0
  438. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_pattern_storage.py +0 -0
  439. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_plugin_update_preservation.py +0 -0
  440. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_post_tool_use_failure.py +0 -0
  441. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_post_tool_use_handler.py +0 -0
  442. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_posttooluse_cigs.py +0 -0
  443. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_pre_commit_hooks.py +0 -0
  444. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_pre_work_validation_integration.py +0 -0
  445. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_pretooluse_event_hierarchy.py +0 -0
  446. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_quality_gates.py +0 -0
  447. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_query_builder.py +0 -0
  448. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_query_cache.py +0 -0
  449. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_query_compilation.py +0 -0
  450. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_reflection.py +0 -0
  451. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_repo_hash.py +0 -0
  452. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_routing.py +0 -0
  453. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_sdk_discoverability.py +0 -0
  454. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_sdk_get_active_work_item.py +0 -0
  455. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_sdk_parent_session.py +0 -0
  456. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_sdk_sqlite_integration.py +0 -0
  457. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_session_cleanup.py +0 -0
  458. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_session_continuity.py +0 -0
  459. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_session_integration.py +0 -0
  460. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_session_registry.py +0 -0
  461. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_session_start_cigs.py +0 -0
  462. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_session_start_info_validation.py +0 -0
  463. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_session_state_manager.py +0 -0
  464. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_spawner_agents.py +0 -0
  465. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_spawner_routing.py +0 -0
  466. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_sqlite_schema.py +0 -0
  467. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_stop_cigs.py +0 -0
  468. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_system_overhead_drift.py +0 -0
  469. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_template_system.py +0 -0
  470. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_todo_collection.py +0 -0
  471. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_traces_collection.py +0 -0
  472. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_track_loading.py +0 -0
  473. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_transcript_linking.py +0 -0
  474. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_update_preserves_incoming_edges.py +0 -0
  475. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_user_prompt_submit_cigs.py +0 -0
  476. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_validate_work_hook.py +0 -0
  477. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_version_migration.py +0 -0
  478. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_violation_tracker.py +0 -0
  479. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_work_queue.py +0 -0
  480. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/python/test_work_type.py +0 -0
  481. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/test_agent_routing.py +0 -0
  482. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/test_autonomy_recommender.py +0 -0
  483. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/test_cigs_cli.py +0 -0
  484. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/test_cigs_cost_calculator.py +0 -0
  485. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/test_cigs_cost_reporter.py +0 -0
  486. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/test_cigs_imperative_messages.py +0 -0
  487. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/test_cigs_messages_basic.py +0 -0
  488. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/test_cli_output_snapshots.py +0 -0
  489. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/test_cli_sdk_parity.py +0 -0
  490. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/test_deployment_models.py +0 -0
  491. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/test_event_log.py +0 -0
  492. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/test_hybrid_event_capture.py +0 -0
  493. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/test_orchestrator_config.py +0 -0
  494. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/test_orchestrator_validator.py +0 -0
  495. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/test_pattern_detector.py +0 -0
  496. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/test_sdk_api_surface.py +0 -0
  497. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/test_sdk_operations.py +0 -0
  498. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/test_transaction_snapshot.py +0 -0
  499. {htmlgraph-0.26.13 → htmlgraph-0.26.15}/tests/test_transcript.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: htmlgraph
3
- Version: 0.26.13
3
+ Version: 0.26.15
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.13",
3
+ "version": "0.26.15",
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.13"
3
+ version = "0.26.15"
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.13"
98
+ __version__ = "0.26.15"
99
99
  __all__ = [
100
100
  # Exceptions
101
101
  "HtmlGraphError",
@@ -1,9 +1,12 @@
1
1
  """
2
2
  Analytics modules for HtmlGraph.
3
3
 
4
- Provides work type analysis, dependency analytics, cross-session analytics, and CLI analytics.
4
+ Provides work type analysis, dependency analytics, cross-session analytics, CLI analytics,
5
+ and cost attribution analysis for OTEL ROI.
5
6
  """
6
7
 
8
+ from htmlgraph.analytics.cost_analyzer import CostAnalyzer
9
+ from htmlgraph.analytics.cost_reporter import CostReporter
7
10
  from htmlgraph.analytics.cross_session import CrossSessionAnalytics
8
11
  from htmlgraph.analytics.dependency import DependencyAnalytics
9
12
  from htmlgraph.analytics.work_type import Analytics
@@ -12,4 +15,6 @@ __all__ = [
12
15
  "Analytics",
13
16
  "DependencyAnalytics",
14
17
  "CrossSessionAnalytics",
18
+ "CostAnalyzer",
19
+ "CostReporter",
15
20
  ]
@@ -0,0 +1,387 @@
1
+ """
2
+ CostAnalyzer for OTEL ROI Analysis - Phase 1.
3
+
4
+ Analyzes cost attribution of Task() delegations vs direct tool execution.
5
+ Provides insights into which delegations are most expensive and their ROI.
6
+
7
+ Components:
8
+ 1. get_task_delegations() - Query all task_delegation events with hierarchy
9
+ 2. calculate_task_cost(event_id) - Sum token costs of all child tool calls
10
+ 3. get_cost_by_subagent_type() - Group costs by subagent type
11
+ 4. get_cost_by_tool_type() - Show which tools cost most
12
+ 5. get_roi_stats() - Calculate parallelization savings and benefits
13
+
14
+ Usage:
15
+ from htmlgraph.analytics.cost_analyzer import CostAnalyzer
16
+ analyzer = CostAnalyzer()
17
+ delegations = analyzer.get_task_delegations_with_costs()
18
+ print(f"Total delegation cost: ${delegations['total_cost_usd']:.2f}")
19
+ """
20
+
21
+ import sqlite3
22
+ from dataclasses import dataclass, field
23
+ from datetime import datetime
24
+ from pathlib import Path
25
+ from typing import Any
26
+
27
+ from htmlgraph.cigs.cost import CostCalculator
28
+
29
+
30
+ @dataclass
31
+ class TaskDelegation:
32
+ """Represents a single Task delegation with cost analysis."""
33
+
34
+ event_id: str
35
+ session_id: str
36
+ timestamp: datetime
37
+ subagent_type: str
38
+ parent_event_id: str | None
39
+ tool_count: int = 0
40
+ total_cost_tokens: int = 0
41
+ child_events: list[dict[str, Any]] = field(default_factory=list)
42
+
43
+ def to_dict(self) -> dict[str, Any]:
44
+ """Convert to dictionary."""
45
+ return {
46
+ "event_id": self.event_id,
47
+ "session_id": self.session_id,
48
+ "timestamp": self.timestamp.isoformat(),
49
+ "subagent_type": self.subagent_type,
50
+ "parent_event_id": self.parent_event_id,
51
+ "tool_count": self.tool_count,
52
+ "total_cost_tokens": self.total_cost_tokens,
53
+ "child_events": self.child_events,
54
+ }
55
+
56
+
57
+ @dataclass
58
+ class CostBreakdown:
59
+ """Cost breakdown analysis."""
60
+
61
+ by_subagent: dict[str, int] = field(default_factory=dict)
62
+ by_tool: dict[str, int] = field(default_factory=dict)
63
+ total_cost_tokens: int = 0
64
+ total_delegations: int = 0
65
+ avg_cost_per_delegation: float = 0.0
66
+
67
+
68
+ @dataclass
69
+ class ROIStats:
70
+ """Return-on-Investment statistics."""
71
+
72
+ total_delegation_cost: int = 0
73
+ estimated_direct_cost: int = 0
74
+ estimated_savings: int = 0
75
+ savings_percentage: float = 0.0
76
+ avg_parallelization_factor: float = 1.0
77
+ context_preservation_benefit: float = 0.0
78
+ total_delegations: int = 0
79
+ avg_cost_per_delegation: float = 0.0
80
+
81
+
82
+ class CostAnalyzer:
83
+ """
84
+ Analyze cost attribution of Task delegations.
85
+
86
+ Queries the agent_events database to calculate:
87
+ - Total cost of each Task delegation (sum of child tool calls)
88
+ - Cost breakdown by subagent type and tool type
89
+ - ROI statistics comparing direct vs delegated execution
90
+ """
91
+
92
+ def __init__(self, graph_dir: Path | None = None):
93
+ """
94
+ Initialize CostAnalyzer.
95
+
96
+ Args:
97
+ graph_dir: Root directory for HtmlGraph (defaults to .htmlgraph)
98
+ """
99
+ if graph_dir is None:
100
+ graph_dir = Path.cwd() / ".htmlgraph"
101
+
102
+ self.graph_dir = Path(graph_dir)
103
+ self.db_path = self.graph_dir / "htmlgraph.db"
104
+ self.cost_calculator = CostCalculator()
105
+
106
+ if not self.db_path.exists():
107
+ raise FileNotFoundError(f"Database not found at {self.db_path}")
108
+
109
+ def _get_connection(self) -> sqlite3.Connection:
110
+ """Get database connection with row factory."""
111
+ conn = sqlite3.connect(str(self.db_path))
112
+ conn.row_factory = sqlite3.Row
113
+ return conn
114
+
115
+ def get_task_delegations(self) -> list[TaskDelegation]:
116
+ """
117
+ Query all task_delegation events from the database.
118
+
119
+ Returns:
120
+ List of TaskDelegation objects ordered by timestamp (newest first)
121
+ """
122
+ conn = self._get_connection()
123
+ try:
124
+ cursor = conn.cursor()
125
+ cursor.execute(
126
+ """
127
+ SELECT
128
+ event_id,
129
+ session_id,
130
+ timestamp,
131
+ subagent_type,
132
+ parent_event_id
133
+ FROM agent_events
134
+ WHERE event_type = 'task_delegation'
135
+ ORDER BY timestamp DESC
136
+ """
137
+ )
138
+
139
+ delegations = []
140
+ for row in cursor.fetchall():
141
+ timestamp = (
142
+ datetime.fromisoformat(row["timestamp"])
143
+ if isinstance(row["timestamp"], str)
144
+ else row["timestamp"]
145
+ )
146
+ delegations.append(
147
+ TaskDelegation(
148
+ event_id=row["event_id"],
149
+ session_id=row["session_id"],
150
+ timestamp=timestamp,
151
+ subagent_type=row["subagent_type"] or "unknown",
152
+ parent_event_id=row["parent_event_id"],
153
+ )
154
+ )
155
+
156
+ return delegations
157
+ finally:
158
+ conn.close()
159
+
160
+ def calculate_task_cost(self, event_id: str) -> tuple[int, list[dict[str, Any]]]:
161
+ """
162
+ Calculate total cost of a Task delegation.
163
+
164
+ Sums all token costs of child tool calls using cost_tokens field.
165
+ Falls back to CIGS cost estimation if cost_tokens is not available.
166
+
167
+ Args:
168
+ event_id: Task delegation event ID
169
+
170
+ Returns:
171
+ Tuple of (total_cost_tokens, child_events_list)
172
+ """
173
+ conn = self._get_connection()
174
+ try:
175
+ cursor = conn.cursor()
176
+
177
+ # Get all children of this task
178
+ cursor.execute(
179
+ """
180
+ SELECT
181
+ event_id,
182
+ tool_name,
183
+ cost_tokens,
184
+ input_summary,
185
+ output_summary,
186
+ timestamp
187
+ FROM agent_events
188
+ WHERE parent_event_id = ?
189
+ AND event_type IN ('tool_call', 'tool_result')
190
+ ORDER BY timestamp ASC
191
+ """,
192
+ (event_id,),
193
+ )
194
+
195
+ total_cost = 0
196
+ child_events = []
197
+
198
+ for row in cursor.fetchall():
199
+ cost = row["cost_tokens"] if row["cost_tokens"] else 0
200
+
201
+ # If no stored cost, estimate based on tool type
202
+ if cost == 0 and row["tool_name"]:
203
+ cost = self.cost_calculator.predict_cost(row["tool_name"], {})
204
+
205
+ total_cost += cost
206
+
207
+ child_events.append(
208
+ {
209
+ "event_id": row["event_id"],
210
+ "tool_name": row["tool_name"],
211
+ "cost_tokens": cost,
212
+ "timestamp": row["timestamp"],
213
+ }
214
+ )
215
+
216
+ return total_cost, child_events
217
+ finally:
218
+ conn.close()
219
+
220
+ def get_task_delegations_with_costs(self) -> dict[str, Any]:
221
+ """
222
+ Get all task delegations with calculated costs.
223
+
224
+ Returns:
225
+ Dictionary with:
226
+ - delegations: List of TaskDelegation with costs
227
+ - total_cost_tokens: Sum of all delegation costs
228
+ - total_delegations: Count of delegations
229
+ - by_subagent_type: Cost breakdown by subagent
230
+ - by_tool_type: Cost breakdown by tool
231
+ """
232
+ delegations = self.get_task_delegations()
233
+
234
+ total_cost = 0
235
+ by_subagent: dict[str, int] = {}
236
+ by_tool: dict[str, int] = {}
237
+
238
+ for delegation in delegations:
239
+ cost, child_events = self.calculate_task_cost(delegation.event_id)
240
+ delegation.total_cost_tokens = cost
241
+ delegation.child_events = child_events
242
+ delegation.tool_count = len(child_events)
243
+
244
+ total_cost += cost
245
+
246
+ # Track by subagent type
247
+ subagent = delegation.subagent_type
248
+ by_subagent[subagent] = by_subagent.get(subagent, 0) + cost
249
+
250
+ # Track by tool type
251
+ for child in child_events:
252
+ tool = child["tool_name"] or "unknown"
253
+ by_tool[tool] = by_tool.get(tool, 0) + child["cost_tokens"]
254
+
255
+ # Convert to USD (approximation: 1M tokens ~ $3 for input, $6 for output)
256
+ # Average: ~$4.50 per 1M tokens
257
+ total_cost_usd = total_cost * 0.0000045
258
+
259
+ return {
260
+ "delegations": delegations,
261
+ "total_cost_tokens": total_cost,
262
+ "total_cost_usd": total_cost_usd,
263
+ "total_delegations": len(delegations),
264
+ "avg_cost_per_delegation": (
265
+ total_cost / len(delegations) if delegations else 0
266
+ ),
267
+ "by_subagent_type": by_subagent,
268
+ "by_tool_type": by_tool,
269
+ }
270
+
271
+ def get_cost_by_subagent_type(self) -> dict[str, int]:
272
+ """
273
+ Group delegation costs by subagent type.
274
+
275
+ Returns:
276
+ Dictionary mapping subagent_type to total tokens spent
277
+ """
278
+ data = self.get_task_delegations_with_costs()
279
+ result = data.get("by_subagent_type", {})
280
+ if isinstance(result, dict):
281
+ return result
282
+ return {}
283
+
284
+ def get_cost_by_tool_type(self) -> dict[str, int]:
285
+ """
286
+ Show which tools cost most across all delegations.
287
+
288
+ Returns:
289
+ Dictionary mapping tool_name to total tokens spent
290
+ """
291
+ data = self.get_task_delegations_with_costs()
292
+ result = data.get("by_tool_type", {})
293
+ if isinstance(result, dict):
294
+ return result
295
+ return {}
296
+
297
+ def get_roi_stats(self) -> ROIStats:
298
+ """
299
+ Calculate ROI statistics comparing delegation vs direct execution.
300
+
301
+ Assumptions:
302
+ - Direct execution: Tokens spent directly on main agent
303
+ - Delegated execution: Tokens in child subagents (already counted)
304
+ - Savings: Context preservation + parallelization benefits
305
+ - Parallelization factor: 1.2-1.5x (subagents can work more efficiently)
306
+ - Context preservation: ~30% token savings from better focus
307
+
308
+ Returns:
309
+ ROIStats with cost and savings analysis
310
+ """
311
+ data = self.get_task_delegations_with_costs()
312
+
313
+ total_delegation_cost = data["total_cost_tokens"]
314
+ total_delegations = data["total_delegations"]
315
+
316
+ # Estimate direct execution cost
317
+ # Assumption: direct execution would cost 2.5x due to context overhead
318
+ estimated_direct_cost = int(total_delegation_cost * 2.5)
319
+
320
+ # Estimate savings
321
+ # Parallelization benefit: 1.2x efficiency
322
+ # Context preservation: 30% savings
323
+ parallelization_factor = 1.2
324
+ context_benefit = 0.30
325
+
326
+ estimated_savings = int(
327
+ estimated_direct_cost
328
+ - (total_delegation_cost * parallelization_factor * (1.0 - context_benefit))
329
+ )
330
+
331
+ savings_percentage = (
332
+ (estimated_savings / estimated_direct_cost * 100)
333
+ if estimated_direct_cost > 0
334
+ else 0.0
335
+ )
336
+
337
+ return ROIStats(
338
+ total_delegation_cost=total_delegation_cost,
339
+ estimated_direct_cost=estimated_direct_cost,
340
+ estimated_savings=estimated_savings,
341
+ savings_percentage=savings_percentage,
342
+ avg_parallelization_factor=parallelization_factor,
343
+ context_preservation_benefit=context_benefit,
344
+ total_delegations=total_delegations,
345
+ avg_cost_per_delegation=(
346
+ total_delegation_cost / total_delegations
347
+ if total_delegations > 0
348
+ else 0.0
349
+ ),
350
+ )
351
+
352
+ def get_top_delegations(self, limit: int = 10) -> list[TaskDelegation]:
353
+ """
354
+ Get the most expensive Task delegations.
355
+
356
+ Args:
357
+ limit: Number of delegations to return (default: 10)
358
+
359
+ Returns:
360
+ List of TaskDelegation sorted by cost (descending)
361
+ """
362
+ data = self.get_task_delegations_with_costs()
363
+ delegations = data["delegations"]
364
+
365
+ # Sort by cost descending
366
+ sorted_delegations = sorted(
367
+ delegations, key=lambda d: d.total_cost_tokens, reverse=True
368
+ )
369
+
370
+ return sorted_delegations[:limit]
371
+
372
+ def get_cost_breakdown(self) -> CostBreakdown:
373
+ """
374
+ Get comprehensive cost breakdown.
375
+
376
+ Returns:
377
+ CostBreakdown with by_subagent and by_tool analysis
378
+ """
379
+ data = self.get_task_delegations_with_costs()
380
+
381
+ return CostBreakdown(
382
+ by_subagent=data["by_subagent_type"],
383
+ by_tool=data["by_tool_type"],
384
+ total_cost_tokens=data["total_cost_tokens"],
385
+ total_delegations=data["total_delegations"],
386
+ avg_cost_per_delegation=data["avg_cost_per_delegation"],
387
+ )