htmlgraph 0.26.1__tar.gz → 0.26.2__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 (433) hide show
  1. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/PKG-INFO +1 -1
  2. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/packages/gemini-extension/gemini-extension.json +1 -1
  3. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/pyproject.toml +1 -1
  4. {htmlgraph-0.26.1/src/python/htmlgraph/hooks → htmlgraph-0.26.2/src/python/htmlgraph}/.htmlgraph/.session-warning-state.json +1 -1
  5. htmlgraph-0.26.2/src/python/htmlgraph/.htmlgraph/agents.json +72 -0
  6. htmlgraph-0.26.2/src/python/htmlgraph/.htmlgraph/htmlgraph.db +0 -0
  7. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/__init__.py +1 -1
  8. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/api/main.py +66 -9
  9. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/api/templates/partials/activity-feed.html +59 -0
  10. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/cli.py +1 -1
  11. htmlgraph-0.26.2/src/python/htmlgraph/config.py +190 -0
  12. htmlgraph-0.26.2/src/python/htmlgraph/dashboard.html +812 -0
  13. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/db/schema.py +4 -5
  14. htmlgraph-0.26.2/src/python/htmlgraph/hooks/.htmlgraph/.session-warning-state.json +6 -0
  15. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/hooks/context.py +39 -8
  16. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/hooks/event_tracker.py +60 -12
  17. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/hooks/pretooluse.py +60 -30
  18. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/hooks/subagent_stop.py +3 -2
  19. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/operations/fastapi_server.py +2 -2
  20. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/orchestration/headless_spawner.py +167 -1
  21. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/server.py +100 -203
  22. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/operations/test_server.py +12 -12
  23. htmlgraph-0.26.1/src/python/htmlgraph/config.py +0 -113
  24. htmlgraph-0.26.1/src/python/htmlgraph/dashboard.html +0 -7458
  25. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/.gitignore +0 -0
  26. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/README.md +0 -0
  27. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/agent-coordination/README.md +0 -0
  28. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/agent-coordination/demo.py +0 -0
  29. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/create_auth_track_demo.py +0 -0
  30. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/create_htmlgraph_dev_track.py +0 -0
  31. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/documentation-site/README.md +0 -0
  32. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/documentation-site/agents.json +0 -0
  33. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/documentation-site/demo.py +0 -0
  34. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/documentation-site/features/doc-api-graph.html +0 -0
  35. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/documentation-site/features/doc-api-overview.html +0 -0
  36. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/documentation-site/features/doc-api-sdk.html +0 -0
  37. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/documentation-site/features/doc-example-advanced.html +0 -0
  38. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/documentation-site/features/doc-example-basic.html +0 -0
  39. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/documentation-site/features/doc-index.html +0 -0
  40. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/documentation-site/features/doc-installation.html +0 -0
  41. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/documentation-site/features/doc-quickstart.html +0 -0
  42. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/handoff-demo.py +0 -0
  43. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/knowledge-base/README.md +0 -0
  44. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/knowledge-base/agents.json +0 -0
  45. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/knowledge-base/demo.py +0 -0
  46. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/knowledge-base/features/feat-276c615f.html +0 -0
  47. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/knowledge-base/features/feat-7a6f797d.html +0 -0
  48. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/knowledge-base/features/note-ai-agents.html +0 -0
  49. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/knowledge-base/features/note-graph-db.html +0 -0
  50. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/knowledge-base/features/note-htmlgraph.html +0 -0
  51. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/knowledge-base/features/note-web-standards.html +0 -0
  52. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/parallel_task_coordination.py +0 -0
  53. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/routing-demo.py +0 -0
  54. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/sdk_demo.py +0 -0
  55. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/todo-list/README.md +0 -0
  56. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/todo-list/demo.py +0 -0
  57. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/todo-list/index.html +0 -0
  58. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/todo-list/styles.css +0 -0
  59. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/todo-list/task-001.html +0 -0
  60. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/todo-list/task-002.html +0 -0
  61. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/todo-list/task-003.html +0 -0
  62. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/todo-list/task-004.html +0 -0
  63. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/todo-list/task-005.html +0 -0
  64. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/examples/todo-list/task-006.html +0 -0
  65. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/packages/gemini-extension/GEMINI.md +0 -0
  66. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/packages/gemini-extension/README.md +0 -0
  67. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/packages/gemini-extension/command_deploy.md +0 -0
  68. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/packages/gemini-extension/command_end.md +0 -0
  69. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/packages/gemini-extension/command_feature-add.md +0 -0
  70. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/packages/gemini-extension/command_feature-complete.md +0 -0
  71. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/packages/gemini-extension/command_feature-primary.md +0 -0
  72. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/packages/gemini-extension/command_feature-start.md +0 -0
  73. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/packages/gemini-extension/command_git-commit.md +0 -0
  74. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/packages/gemini-extension/command_help.md +0 -0
  75. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/packages/gemini-extension/command_init.md +0 -0
  76. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/packages/gemini-extension/command_plan.md +0 -0
  77. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/packages/gemini-extension/command_recommend.md +0 -0
  78. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/packages/gemini-extension/command_serve.md +0 -0
  79. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/packages/gemini-extension/command_spike.md +0 -0
  80. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/packages/gemini-extension/command_start.md +0 -0
  81. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/packages/gemini-extension/command_status.md +0 -0
  82. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/packages/gemini-extension/command_track.md +0 -0
  83. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/packages/gemini-extension/hooks/hooks.json +0 -0
  84. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/packages/gemini-extension/hooks/scripts/post-tool.sh +0 -0
  85. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/packages/gemini-extension/hooks/scripts/session-end.sh +0 -0
  86. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/packages/gemini-extension/hooks/scripts/session-start.sh +0 -0
  87. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/js/htmlgraph.js +0 -0
  88. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/agent_detection.py +0 -0
  89. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/agent_registry.py +0 -0
  90. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/agents.py +0 -0
  91. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/analytics/__init__.py +0 -0
  92. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/analytics/cli.py +0 -0
  93. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/analytics/cross_session.py +0 -0
  94. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/analytics/dependency.py +0 -0
  95. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/analytics/work_type.py +0 -0
  96. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/analytics_index.py +0 -0
  97. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/api/__init__.py +0 -0
  98. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/api/static/htmx.min.js +0 -0
  99. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/api/static/style-redesign.css +0 -0
  100. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/api/static/style.css +0 -0
  101. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/api/templates/dashboard-redesign.html +0 -0
  102. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/api/templates/dashboard.html +0 -0
  103. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/api/templates/partials/activity-feed-hierarchical.html +0 -0
  104. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/api/templates/partials/agents-redesign.html +0 -0
  105. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/api/templates/partials/agents.html +0 -0
  106. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/api/templates/partials/event-traces.html +0 -0
  107. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/api/templates/partials/features-kanban-redesign.html +0 -0
  108. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/api/templates/partials/features.html +0 -0
  109. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/api/templates/partials/metrics-redesign.html +0 -0
  110. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/api/templates/partials/metrics.html +0 -0
  111. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/api/templates/partials/orchestration-redesign.html +0 -0
  112. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/api/templates/partials/orchestration.html +0 -0
  113. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/api/templates/partials/spawners.html +0 -0
  114. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/archive/__init__.py +0 -0
  115. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/archive/bloom.py +0 -0
  116. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/archive/fts.py +0 -0
  117. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/archive/manager.py +0 -0
  118. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/archive/search.py +0 -0
  119. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/atomic_ops.py +0 -0
  120. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/attribute_index.py +0 -0
  121. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/builders/__init__.py +0 -0
  122. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/builders/base.py +0 -0
  123. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/builders/bug.py +0 -0
  124. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/builders/chore.py +0 -0
  125. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/builders/epic.py +0 -0
  126. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/builders/feature.py +0 -0
  127. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/builders/insight.py +0 -0
  128. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/builders/metric.py +0 -0
  129. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/builders/pattern.py +0 -0
  130. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/builders/phase.py +0 -0
  131. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/builders/spike.py +0 -0
  132. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/builders/track.py +0 -0
  133. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/cigs/__init__.py +0 -0
  134. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/cigs/autonomy.py +0 -0
  135. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/cigs/cost.py +0 -0
  136. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/cigs/messages_basic.py +0 -0
  137. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/cigs/messaging.py +0 -0
  138. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/cigs/models.py +0 -0
  139. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/cigs/pattern_storage.py +0 -0
  140. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/cigs/patterns.py +0 -0
  141. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/cigs/posttool_analyzer.py +0 -0
  142. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/cigs/reporter.py +0 -0
  143. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/cigs/tracker.py +0 -0
  144. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/cli_commands/__init__.py +0 -0
  145. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/cli_commands/feature.py +0 -0
  146. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/cli_framework.py +0 -0
  147. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/collections/__init__.py +0 -0
  148. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/collections/base.py +0 -0
  149. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/collections/bug.py +0 -0
  150. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/collections/chore.py +0 -0
  151. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/collections/epic.py +0 -0
  152. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/collections/feature.py +0 -0
  153. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/collections/insight.py +0 -0
  154. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/collections/metric.py +0 -0
  155. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/collections/pattern.py +0 -0
  156. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/collections/phase.py +0 -0
  157. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/collections/session.py +0 -0
  158. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/collections/spike.py +0 -0
  159. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/collections/task_delegation.py +0 -0
  160. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/collections/todo.py +0 -0
  161. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/collections/traces.py +0 -0
  162. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/context_analytics.py +0 -0
  163. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/converter.py +0 -0
  164. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/cost_analysis/__init__.py +0 -0
  165. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/cost_analysis/analyzer.py +0 -0
  166. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/dashboard.html.backup +0 -0
  167. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/dashboard.html.bak +0 -0
  168. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/dashboard.html.bak2 +0 -0
  169. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/dashboard.html.bak3 +0 -0
  170. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/db/__init__.py +0 -0
  171. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/db/queries.py +0 -0
  172. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/dependency_models.py +0 -0
  173. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/deploy.py +0 -0
  174. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/deployment_models.py +0 -0
  175. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/docs/API_REFERENCE.md +0 -0
  176. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/docs/HTTP_API.md +0 -0
  177. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/docs/INTEGRATION_GUIDE.md +0 -0
  178. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/docs/ORCHESTRATION_PATTERNS.md +0 -0
  179. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/docs/README.md +0 -0
  180. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/docs/__init__.py +0 -0
  181. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/docs/docs_version.py +0 -0
  182. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/docs/metadata.py +0 -0
  183. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/docs/migrations.py +0 -0
  184. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/docs/template_engine.py +0 -0
  185. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/docs/templates/_sections/cli_reference.md.j2 +0 -0
  186. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/docs/templates/_sections/core_concepts.md.j2 +0 -0
  187. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/docs/templates/_sections/sdk_basics.md.j2 +0 -0
  188. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/docs/templates/base_agents.md.j2 +0 -0
  189. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/docs/templates/example_user_override.md.j2 +0 -0
  190. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/docs/version_check.py +0 -0
  191. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/edge_index.py +0 -0
  192. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/error_handler.py +0 -0
  193. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/event_log.py +0 -0
  194. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/event_migration.py +0 -0
  195. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/exceptions.py +0 -0
  196. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/extensions/gemini/GEMINI.md +0 -0
  197. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/extensions/gemini/README.md +0 -0
  198. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/extensions/gemini/gemini-extension.json +0 -0
  199. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/extensions/gemini/hooks/hooks.json +0 -0
  200. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/extensions/gemini/hooks/scripts/post-tool.sh +0 -0
  201. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/extensions/gemini/hooks/scripts/session-end.sh +0 -0
  202. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/extensions/gemini/hooks/scripts/session-start.sh +0 -0
  203. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/file_watcher.py +0 -0
  204. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/find_api.py +0 -0
  205. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/git_events.py +0 -0
  206. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/graph.py +0 -0
  207. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/hooks/.htmlgraph/agents.json +0 -0
  208. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/hooks/.htmlgraph/index.sqlite +0 -0
  209. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/hooks/__init__.py +0 -0
  210. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/hooks/bootstrap.py +0 -0
  211. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/hooks/cigs_pretool_enforcer.py +0 -0
  212. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/hooks/concurrent_sessions.py +0 -0
  213. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/hooks/drift_handler.py +0 -0
  214. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/hooks/hooks-config.example.json +0 -0
  215. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/hooks/installer.py +0 -0
  216. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/hooks/orchestrator.py +0 -0
  217. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/hooks/orchestrator_reflector.py +0 -0
  218. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/hooks/post-checkout.sh +0 -0
  219. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/hooks/post-commit.sh +0 -0
  220. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/hooks/post-merge.sh +0 -0
  221. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/hooks/post_tool_use_failure.py +0 -0
  222. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/hooks/post_tool_use_handler.py +0 -0
  223. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/hooks/posttooluse.py +0 -0
  224. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/hooks/pre-commit.sh +0 -0
  225. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/hooks/pre-push.sh +0 -0
  226. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/hooks/prompt_analyzer.py +0 -0
  227. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/hooks/session_handler.py +0 -0
  228. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/hooks/state_manager.py +0 -0
  229. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/hooks/task_enforcer.py +0 -0
  230. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/hooks/task_validator.py +0 -0
  231. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/hooks/validator.py +0 -0
  232. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/ids.py +0 -0
  233. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/index.d.ts +0 -0
  234. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/learning.py +0 -0
  235. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/mcp_server.py +0 -0
  236. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/models.py +0 -0
  237. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/operations/README.md +0 -0
  238. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/operations/__init__.py +0 -0
  239. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/operations/analytics.py +0 -0
  240. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/operations/events.py +0 -0
  241. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/operations/hooks.py +0 -0
  242. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/operations/server.py +0 -0
  243. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/orchestration/__init__.py +0 -0
  244. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/orchestration/live_events.py +0 -0
  245. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/orchestration/model_selection.py +0 -0
  246. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/orchestration/task_coordination.py +0 -0
  247. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/orchestrator-system-prompt-optimized.txt +0 -0
  248. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/orchestrator.py +0 -0
  249. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/orchestrator_mode.py +0 -0
  250. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/orchestrator_validator.py +0 -0
  251. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/parallel.py +0 -0
  252. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/parser.py +0 -0
  253. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/planning.py +0 -0
  254. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/pydantic_models.py +0 -0
  255. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/quality_gates.py +0 -0
  256. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/query_builder.py +0 -0
  257. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/reflection.py +0 -0
  258. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/repo_hash.py +0 -0
  259. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/routing.py +0 -0
  260. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/scripts/__init__.py +0 -0
  261. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/scripts/deploy.py +0 -0
  262. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/sdk.py +0 -0
  263. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/services/__init__.py +0 -0
  264. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/services/claiming.py +0 -0
  265. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/session_hooks.py +0 -0
  266. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/session_manager.py +0 -0
  267. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/session_registry.py +0 -0
  268. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/session_state.py +0 -0
  269. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/session_warning.py +0 -0
  270. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/setup.py +0 -0
  271. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/spike_index.py +0 -0
  272. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/styles.css +0 -0
  273. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/sync_docs.py +0 -0
  274. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/system_prompts.py +0 -0
  275. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/templates/AGENTS.md.template +0 -0
  276. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/templates/CLAUDE.md.template +0 -0
  277. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/templates/GEMINI.md.template +0 -0
  278. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/templates/orchestration-view.html +0 -0
  279. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/track_builder.py +0 -0
  280. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/track_manager.py +0 -0
  281. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/transcript.py +0 -0
  282. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/transcript_analytics.py +0 -0
  283. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/types.py +0 -0
  284. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/validation.py +0 -0
  285. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/watch.py +0 -0
  286. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/src/python/htmlgraph/work_type_utils.py +0 -0
  287. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/benchmarks/README.md +0 -0
  288. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/benchmarks/__init__.py +0 -0
  289. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/benchmarks/bench_graph.py +0 -0
  290. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/benchmarks/conftest.py +0 -0
  291. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/hooks/__init__.py +0 -0
  292. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/hooks/test_bootstrap.py +0 -0
  293. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/hooks/test_concurrent_sessions.py +0 -0
  294. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/hooks/test_context.py +0 -0
  295. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/hooks/test_event_tracker.py +0 -0
  296. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/hooks/test_hybrid_event_capture.py +0 -0
  297. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/hooks/test_prompt_analyzer.py +0 -0
  298. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/hooks/test_session_handler.py +0 -0
  299. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/hooks/test_state_manager.py +0 -0
  300. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/hooks/test_system_prompt_persistence.py +0 -0
  301. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/hooks/test_system_prompt_persistence_integration.py +0 -0
  302. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/integration/multi_agent/README.md +0 -0
  303. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/integration/multi_agent/__init__.py +0 -0
  304. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/integration/multi_agent/test_agent_quirks.py +0 -0
  305. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/integration/multi_agent/test_git_continuity_spine.py +0 -0
  306. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/integration/test_cigs_hook_flow.py +0 -0
  307. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/integration/test_cigs_integration.py +0 -0
  308. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/integration/test_cigs_learning.py +0 -0
  309. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/integration/test_dashboard_spawner_display.py +0 -0
  310. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/integration/test_deployment_workflow.py +0 -0
  311. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/integration/test_handoff_routing.py +0 -0
  312. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/integration/test_multi_agent_coordination.py +0 -0
  313. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/integration/test_orchestrator_spawner_delegation.py +0 -0
  314. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/integration/test_post_compact_delegation.py +0 -0
  315. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/integration/test_spawner_integration.py +0 -0
  316. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/integration/test_spawner_observability_e2e.py +0 -0
  317. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/integration/test_spawner_tool_tracking.py +0 -0
  318. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/js/README.md +0 -0
  319. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/js/test_htmlgraph.html +0 -0
  320. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/operations/__init__.py +0 -0
  321. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/operations/test_hooks.py +0 -0
  322. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/__init__.py +0 -0
  323. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/conftest.py +0 -0
  324. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_activity_feed_ui.py +0 -0
  325. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_agent_attribution.py +0 -0
  326. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_agent_detection.py +0 -0
  327. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_analytics.py +0 -0
  328. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_archive_manager.py +0 -0
  329. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_archive_search.py +0 -0
  330. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_atomic_ops.py +0 -0
  331. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_auto_spike.py +0 -0
  332. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_cigs_pretool_enforcer.py +0 -0
  333. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_claiming.py +0 -0
  334. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_cli_commands.py +0 -0
  335. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_cli_pydantic_models.py +0 -0
  336. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_cli_rich_output.py +0 -0
  337. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_collection_filter.py +0 -0
  338. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_cost_analyzer.py +0 -0
  339. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_cross_agent_attribution.py +0 -0
  340. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_cross_session_analytics.py +0 -0
  341. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_dashboard_attribution.py +0 -0
  342. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_dashboard_ui.py +0 -0
  343. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_delegation_fk_fix.py +0 -0
  344. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_delete.py +0 -0
  345. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_deploy.py +0 -0
  346. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_drift_parent_activity.py +0 -0
  347. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_drift_queue_cleanup.py +0 -0
  348. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_edge_index.py +0 -0
  349. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_error_handling.py +0 -0
  350. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_event_index.py +0 -0
  351. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_event_query.py +0 -0
  352. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_event_tracing.py +0 -0
  353. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_feature_track_linkage_phase1.py +0 -0
  354. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_find_api.py +0 -0
  355. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_git_events.py +0 -0
  356. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_graph_traversal.py +0 -0
  357. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_handoff.py +0 -0
  358. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_headless_spawner.py +0 -0
  359. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_headless_spawner_parent_session.py +0 -0
  360. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_ids.py +0 -0
  361. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_install_hooks.py +0 -0
  362. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_lifecycle.py +0 -0
  363. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_mcp_server.py +0 -0
  364. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_mcp_stdio_transport.py +0 -0
  365. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_models.py +0 -0
  366. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_orchestration.py +0 -0
  367. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_orchestrator_circuit_breaker.py +0 -0
  368. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_orchestrator_cli.py +0 -0
  369. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_orchestrator_enforce_hook.py +0 -0
  370. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_orchestrator_mode.py +0 -0
  371. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_parent_child_event_linking.py +0 -0
  372. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_parent_child_linking.py +0 -0
  373. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_parent_linking_integration.py +0 -0
  374. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_pattern_storage.py +0 -0
  375. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_plugin_update_preservation.py +0 -0
  376. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_post_tool_use_failure.py +0 -0
  377. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_post_tool_use_handler.py +0 -0
  378. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_posttooluse_cigs.py +0 -0
  379. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_pre_commit_hooks.py +0 -0
  380. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_pre_work_validation_integration.py +0 -0
  381. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_quality_gates.py +0 -0
  382. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_query_builder.py +0 -0
  383. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_query_cache.py +0 -0
  384. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_query_compilation.py +0 -0
  385. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_reflection.py +0 -0
  386. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_repo_hash.py +0 -0
  387. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_routing.py +0 -0
  388. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_sdk_discoverability.py +0 -0
  389. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_sdk_get_active_work_item.py +0 -0
  390. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_sdk_parent_session.py +0 -0
  391. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_sdk_sqlite_integration.py +0 -0
  392. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_session_cleanup.py +0 -0
  393. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_session_continuity.py +0 -0
  394. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_session_integration.py +0 -0
  395. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_session_registry.py +0 -0
  396. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_session_start_cigs.py +0 -0
  397. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_session_start_info_validation.py +0 -0
  398. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_session_state_manager.py +0 -0
  399. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_spawner_agents.py +0 -0
  400. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_spawner_routing.py +0 -0
  401. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_sqlite_schema.py +0 -0
  402. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_stop_cigs.py +0 -0
  403. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_system_overhead_drift.py +0 -0
  404. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_template_system.py +0 -0
  405. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_todo_collection.py +0 -0
  406. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_traces_collection.py +0 -0
  407. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_track_loading.py +0 -0
  408. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_transcript_linking.py +0 -0
  409. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_update_preserves_incoming_edges.py +0 -0
  410. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_user_prompt_submit_cigs.py +0 -0
  411. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_validate_work_hook.py +0 -0
  412. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_version_migration.py +0 -0
  413. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_violation_tracker.py +0 -0
  414. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_work_queue.py +0 -0
  415. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/python/test_work_type.py +0 -0
  416. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/test_agent_routing.py +0 -0
  417. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/test_autonomy_recommender.py +0 -0
  418. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/test_cigs_cli.py +0 -0
  419. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/test_cigs_cost_calculator.py +0 -0
  420. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/test_cigs_cost_reporter.py +0 -0
  421. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/test_cigs_imperative_messages.py +0 -0
  422. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/test_cigs_messages_basic.py +0 -0
  423. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/test_cli_output_snapshots.py +0 -0
  424. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/test_cli_sdk_parity.py +0 -0
  425. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/test_deployment_models.py +0 -0
  426. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/test_event_log.py +0 -0
  427. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/test_hybrid_event_capture.py +0 -0
  428. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/test_orchestrator_validator.py +0 -0
  429. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/test_pattern_detector.py +0 -0
  430. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/test_sdk_api_surface.py +0 -0
  431. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/test_sdk_operations.py +0 -0
  432. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/test_transaction_snapshot.py +0 -0
  433. {htmlgraph-0.26.1 → htmlgraph-0.26.2}/tests/test_transcript.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: htmlgraph
3
- Version: 0.26.1
3
+ Version: 0.26.2
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.1",
3
+ "version": "0.26.2",
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.1"
3
+ version = "0.26.2"
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"
@@ -2,5 +2,5 @@
2
2
  "dismissed_at": null,
3
3
  "dismissed_by": null,
4
4
  "session_id": null,
5
- "show_count": 101
5
+ "show_count": 30
6
6
  }
@@ -0,0 +1,72 @@
1
+ {
2
+ "version": "1.0",
3
+ "updated": "2026-01-11T04:13:54.354401",
4
+ "agents": {
5
+ "claude": {
6
+ "id": "claude",
7
+ "name": "Claude",
8
+ "capabilities": [
9
+ "python",
10
+ "javascript",
11
+ "typescript",
12
+ "html",
13
+ "css",
14
+ "code-review",
15
+ "testing",
16
+ "documentation",
17
+ "debugging",
18
+ "refactoring",
19
+ "architecture",
20
+ "api-design"
21
+ ],
22
+ "max_parallel_tasks": 3,
23
+ "preferred_complexity": [
24
+ "low",
25
+ "medium",
26
+ "high",
27
+ "very-high"
28
+ ],
29
+ "active": true,
30
+ "metadata": {}
31
+ },
32
+ "gemini": {
33
+ "id": "gemini",
34
+ "name": "Gemini",
35
+ "capabilities": [
36
+ "python",
37
+ "data-analysis",
38
+ "documentation",
39
+ "testing",
40
+ "code-review",
41
+ "javascript"
42
+ ],
43
+ "max_parallel_tasks": 2,
44
+ "preferred_complexity": [
45
+ "low",
46
+ "medium",
47
+ "high"
48
+ ],
49
+ "active": true,
50
+ "metadata": {}
51
+ },
52
+ "codex": {
53
+ "id": "codex",
54
+ "name": "Codex",
55
+ "capabilities": [
56
+ "python",
57
+ "javascript",
58
+ "debugging",
59
+ "testing",
60
+ "code-generation",
61
+ "documentation"
62
+ ],
63
+ "max_parallel_tasks": 2,
64
+ "preferred_complexity": [
65
+ "low",
66
+ "medium"
67
+ ],
68
+ "active": true,
69
+ "metadata": {}
70
+ }
71
+ }
72
+ }
@@ -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.1"
98
+ __version__ = "0.26.2"
99
99
  __all__ = [
100
100
  # Exceptions
101
101
  "HtmlGraphError",
@@ -394,7 +394,7 @@ def get_app(db_path: str) -> FastAPI:
394
394
  query = """
395
395
  SELECT e.event_id, e.agent_id, e.event_type, e.timestamp, e.tool_name,
396
396
  e.input_summary, e.output_summary, e.session_id,
397
- e.status, e.model
397
+ e.parent_event_id, e.status, e.model
398
398
  FROM agent_events e
399
399
  WHERE 1=1
400
400
  """
@@ -428,9 +428,9 @@ def get_app(db_path: str) -> FastAPI:
428
428
  input_summary=row[5],
429
429
  output_summary=row[6],
430
430
  session_id=row[7],
431
- parent_event_id=None, # Not available in all schema versions
432
- status=row[8],
433
- model=row[9],
431
+ parent_event_id=row[8],
432
+ status=row[9],
433
+ model=row[10],
434
434
  )
435
435
  for row in rows
436
436
  ]
@@ -768,7 +768,8 @@ def get_app(db_path: str) -> FastAPI:
768
768
  output_summary,
769
769
  session_id,
770
770
  status,
771
- model
771
+ model,
772
+ parent_event_id
772
773
  FROM agent_events
773
774
  WHERE event_type IN ({event_type_placeholders})
774
775
  """
@@ -799,6 +800,7 @@ def get_app(db_path: str) -> FastAPI:
799
800
  "session_id": row[8],
800
801
  "status": row[9],
801
802
  "model": row[10],
803
+ "parent_event_id": row[11],
802
804
  }
803
805
  )
804
806
 
@@ -1017,8 +1019,10 @@ def get_app(db_path: str) -> FastAPI:
1017
1019
  input_summary,
1018
1020
  execution_duration_seconds,
1019
1021
  status,
1020
- COALESCE(subagent_type, agent_id) as agent_id,
1021
- model
1022
+ agent_id,
1023
+ model,
1024
+ context,
1025
+ subagent_type
1022
1026
  FROM agent_events
1023
1027
  WHERE parent_event_id = ?
1024
1028
  ORDER BY timestamp ASC
@@ -1048,7 +1052,34 @@ def get_app(db_path: str) -> FastAPI:
1048
1052
  duration = row[4] or 0.0
1049
1053
  status = row[5]
1050
1054
  agent = row[6] or "unknown"
1051
- model = row[7] # Add model field
1055
+ model = row[7]
1056
+ context_json = row[8]
1057
+ subagent_type = row[9]
1058
+
1059
+ # Parse context to extract spawner metadata
1060
+ context = {}
1061
+ spawner_type = None
1062
+ spawned_agent = None
1063
+ if context_json:
1064
+ try:
1065
+ context = json.loads(context_json)
1066
+ spawner_type = context.get("spawner_type")
1067
+ spawned_agent = context.get("spawned_agent")
1068
+ except (json.JSONDecodeError, TypeError):
1069
+ pass
1070
+
1071
+ # If no spawner_type but subagent_type is set, treat it as a spawner delegation
1072
+ # This handles both HeadlessSpawner (spawner_type in context) and
1073
+ # Claude Code plugin agents (subagent_type field)
1074
+ if not spawner_type and subagent_type:
1075
+ # Extract spawner name from subagent_type (e.g., ".claude-plugin:gemini" -> "gemini")
1076
+ if ":" in subagent_type:
1077
+ spawner_type = subagent_type.split(":")[-1]
1078
+ else:
1079
+ spawner_type = subagent_type
1080
+ spawned_agent = (
1081
+ agent # Use the agent_id as the spawned agent
1082
+ )
1052
1083
 
1053
1084
  # Build summary (input_text already contains formatted summary)
1054
1085
  summary = input_text[:80] + (
@@ -1071,9 +1102,17 @@ def get_app(db_path: str) -> FastAPI:
1071
1102
  "duration_seconds": round(duration, 2),
1072
1103
  "agent": agent,
1073
1104
  "depth": depth,
1074
- "model": model, # Include model in child dict
1105
+ "model": model,
1075
1106
  }
1076
1107
 
1108
+ # Include spawner metadata if present
1109
+ if spawner_type:
1110
+ child_dict["spawner_type"] = spawner_type
1111
+ if spawned_agent:
1112
+ child_dict["spawned_agent"] = spawned_agent
1113
+ if subagent_type:
1114
+ child_dict["subagent_type"] = subagent_type
1115
+
1077
1116
  # Only add children key if there are nested children
1078
1117
  if nested_children:
1079
1118
  child_dict["children"] = nested_children
@@ -1107,6 +1146,22 @@ def get_app(db_path: str) -> FastAPI:
1107
1146
  0 if uq_status == "recorded" or uq_status == "success" else 1
1108
1147
  ) + children_error
1109
1148
 
1149
+ # Check if any child has spawner metadata
1150
+ def has_spawner_in_children(
1151
+ children_list: list[dict[str, Any]],
1152
+ ) -> bool:
1153
+ """Recursively check if any child has spawner metadata."""
1154
+ for child in children_list:
1155
+ if child.get("spawner_type") or child.get("spawned_agent"):
1156
+ return True
1157
+ if child.get("children") and has_spawner_in_children(
1158
+ child["children"]
1159
+ ):
1160
+ return True
1161
+ return False
1162
+
1163
+ has_spawner = has_spawner_in_children(children)
1164
+
1110
1165
  # Step 4: Build conversation turn object
1111
1166
  conversation_turn = {
1112
1167
  "userQuery": {
@@ -1114,8 +1169,10 @@ def get_app(db_path: str) -> FastAPI:
1114
1169
  "timestamp": uq_timestamp,
1115
1170
  "prompt": prompt_text[:200], # Truncate for display
1116
1171
  "duration_seconds": round(uq_duration, 2),
1172
+ "agent_id": uq_row[5], # Include agent_id from UserQuery
1117
1173
  },
1118
1174
  "children": children,
1175
+ "has_spawner": has_spawner,
1119
1176
  "stats": {
1120
1177
  "tool_count": len(children),
1121
1178
  "total_duration": round(total_duration, 2),
@@ -804,6 +804,65 @@ function collapseAllConversationTurns() {
804
804
  });
805
805
  }
806
806
 
807
+ /**
808
+ * Filter conversation turns by agent type
809
+ * @param {string} filterValue - Filter type: 'all', 'direct', 'spawner', or specific spawner type ('gemini', 'codex', 'copilot')
810
+ */
811
+ function filterByAgentType(filterValue) {
812
+ const conversationTurns = document.querySelectorAll('.conversation-turn');
813
+
814
+ conversationTurns.forEach(turn => {
815
+ const spawnType = turn.getAttribute('data-spawner-type');
816
+ let shouldShow = false;
817
+
818
+ switch (filterValue) {
819
+ case 'all':
820
+ // Show all conversation turns
821
+ shouldShow = true;
822
+ break;
823
+
824
+ case 'direct':
825
+ // Show only direct (non-spawner) turns
826
+ shouldShow = spawnType === 'direct';
827
+ break;
828
+
829
+ case 'spawner':
830
+ // Show only spawner delegation turns
831
+ shouldShow = spawnType === 'spawner';
832
+ break;
833
+
834
+ case 'gemini':
835
+ case 'codex':
836
+ case 'copilot':
837
+ // Show only turns that contain child events with matching spawner type
838
+ shouldShow = hasChildWithSpawnerType(turn, filterValue);
839
+ break;
840
+
841
+ default:
842
+ shouldShow = true;
843
+ }
844
+
845
+ // Apply visibility
846
+ if (shouldShow) {
847
+ turn.style.display = '';
848
+ } else {
849
+ turn.style.display = 'none';
850
+ }
851
+ });
852
+ }
853
+
854
+ /**
855
+ * Check if a conversation turn has any child events with the specified spawner type
856
+ * @param {HTMLElement} turn - The conversation turn element
857
+ * @param {string} spawnerType - The spawner type to search for ('gemini', 'codex', 'copilot')
858
+ * @returns {boolean} True if the turn contains at least one child with the spawner type
859
+ */
860
+ function hasChildWithSpawnerType(turn, spawnerType) {
861
+ // Look for spawner badges that match the spawner type
862
+ const spawnerBadges = turn.querySelectorAll(`.spawner-badge.spawner-${spawnerType}`);
863
+ return spawnerBadges.length > 0;
864
+ }
865
+
807
866
  // ============================================
808
867
  // Live Spawner Event Handling via WebSocket
809
868
  // ============================================
@@ -150,7 +150,7 @@ def cmd_serve(args: argparse.Namespace) -> None:
150
150
  # Default to database in graph dir if not specified
151
151
  db_path = getattr(args, "db", None)
152
152
  if not db_path:
153
- db_path = str(Path(args.graph_dir) / "index.sqlite")
153
+ db_path = str(Path(args.graph_dir) / "htmlgraph.db")
154
154
 
155
155
  result = start_fastapi_server(
156
156
  port=args.port,
@@ -0,0 +1,190 @@
1
+ """
2
+ HtmlGraph Configuration Management.
3
+
4
+ This module provides centralized configuration management using Pydantic Settings,
5
+ allowing configuration from environment variables, .env files, and CLI arguments.
6
+
7
+ IMPORTANT: Database path functions (get_database_path, get_analytics_cache_path)
8
+ are lightweight and have NO dependencies. They can be imported anywhere.
9
+ """
10
+
11
+ import os
12
+ from pathlib import Path
13
+ from typing import Any
14
+
15
+ # =============================================================================
16
+ # LIGHTWEIGHT DATABASE PATH FUNCTIONS (NO DEPENDENCIES)
17
+ # These MUST come before any heavy imports so spawners can use them
18
+ # =============================================================================
19
+
20
+ # Database filenames (SINGLE SOURCE OF TRUTH)
21
+ DATABASE_FILENAME = "htmlgraph.db" # Unified event database
22
+ ANALYTICS_CACHE_FILENAME = "index.sqlite" # Analytics cache (rebuildable)
23
+
24
+
25
+ def get_database_path(project_root: Path | str | None = None) -> Path:
26
+ """
27
+ Get the unified database path for event tracking.
28
+
29
+ This is the SINGLE source of truth for database location.
30
+ All hooks, agents, and spawners MUST use this function.
31
+
32
+ Args:
33
+ project_root: Optional project root path. If None, uses HTMLGRAPH_PROJECT_ROOT
34
+ env var or current working directory.
35
+
36
+ Returns:
37
+ Path to htmlgraph.db (the unified event database)
38
+ """
39
+ if project_root is None:
40
+ project_root = Path(os.environ.get("HTMLGRAPH_PROJECT_ROOT", os.getcwd()))
41
+ else:
42
+ project_root = Path(project_root)
43
+
44
+ return project_root / ".htmlgraph" / DATABASE_FILENAME
45
+
46
+
47
+ def get_analytics_cache_path(project_root: Path | str | None = None) -> Path:
48
+ """
49
+ Get the analytics cache database path.
50
+
51
+ This is for read-only analytics queries (rebuildable from events).
52
+ NOT for event tracking - use get_database_path() for that.
53
+
54
+ Args:
55
+ project_root: Optional project root path. If None, uses HTMLGRAPH_PROJECT_ROOT
56
+ env var or current working directory.
57
+
58
+ Returns:
59
+ Path to index.sqlite (analytics cache, gitignored)
60
+ """
61
+ if project_root is None:
62
+ project_root = Path(os.environ.get("HTMLGRAPH_PROJECT_ROOT", os.getcwd()))
63
+ else:
64
+ project_root = Path(project_root)
65
+
66
+ return project_root / ".htmlgraph" / ANALYTICS_CACHE_FILENAME
67
+
68
+
69
+ # =============================================================================
70
+ # PYDANTIC CONFIGURATION (Heavy imports below - spawners don't need this)
71
+ # =============================================================================
72
+
73
+ try:
74
+ from pydantic_settings import BaseSettings
75
+
76
+ _PYDANTIC_AVAILABLE = True
77
+ except ImportError:
78
+ _PYDANTIC_AVAILABLE = False
79
+ BaseSettings = object # type: ignore
80
+
81
+
82
+ if _PYDANTIC_AVAILABLE:
83
+
84
+ class HtmlGraphConfig(BaseSettings):
85
+ """Global HtmlGraph configuration using Pydantic Settings.
86
+
87
+ Configuration can be provided via:
88
+ 1. Environment variables (prefix: HTMLGRAPH_)
89
+ 2. .env file
90
+ 3. Direct instantiation with parameters
91
+ 4. CLI argument overrides
92
+ """
93
+
94
+ # Core paths
95
+ graph_dir: Path = Path.home() / ".htmlgraph"
96
+
97
+ # Database paths (SINGLE SOURCE OF TRUTH)
98
+ # All hooks, agents, and spawners MUST use these via get_database_path()
99
+ database_filename: str = "htmlgraph.db" # Unified event database
100
+ analytics_cache_filename: str = "index.sqlite" # Analytics cache (rebuildable)
101
+
102
+ # Feature tracking
103
+ features_dir: Path | None = None
104
+ sessions_dir: Path | None = None
105
+ spikes_dir: Path | None = None
106
+ tracks_dir: Path | None = None
107
+ archives_dir: Path | None = None
108
+
109
+ # CLI behavior
110
+ debug: bool = False
111
+ verbose: bool = False
112
+ auto_sync: bool = True
113
+ color_output: bool = True
114
+
115
+ # Session management
116
+ max_sessions: int = 100
117
+ session_retention_days: int = 30
118
+ auto_archive_sessions: bool = True
119
+
120
+ # Performance
121
+ max_query_results: int = 1000
122
+ cache_enabled: bool = True
123
+ cache_ttl_seconds: int = 3600
124
+
125
+ # Logging
126
+ log_level: str = "INFO"
127
+ log_file: Path | None = None
128
+
129
+ model_config = {
130
+ "env_prefix": "HTMLGRAPH_",
131
+ "env_file": ".env",
132
+ "case_sensitive": False,
133
+ }
134
+
135
+ def __init__(self, **data: Any) -> None:
136
+ """Initialize config and compute derived paths."""
137
+ super().__init__(**data)
138
+ # Compute derived paths if not explicitly set
139
+ if self.features_dir is None:
140
+ self.features_dir = self.graph_dir / "features"
141
+ if self.sessions_dir is None:
142
+ self.sessions_dir = self.graph_dir / "sessions"
143
+ if self.spikes_dir is None:
144
+ self.spikes_dir = self.graph_dir / "spikes"
145
+ if self.tracks_dir is None:
146
+ self.tracks_dir = self.graph_dir / "tracks"
147
+ if self.archives_dir is None:
148
+ self.archives_dir = self.graph_dir / "archives"
149
+
150
+ def ensure_directories(self) -> None:
151
+ """Create all configured directories if they don't exist."""
152
+ for directory in [
153
+ self.graph_dir,
154
+ self.features_dir,
155
+ self.sessions_dir,
156
+ self.spikes_dir,
157
+ self.tracks_dir,
158
+ self.archives_dir,
159
+ ]:
160
+ if directory:
161
+ directory.mkdir(parents=True, exist_ok=True)
162
+
163
+ def get_config_dict(self) -> dict[str, Any]:
164
+ """Get configuration as dictionary."""
165
+ return {
166
+ "graph_dir": str(self.graph_dir),
167
+ "features_dir": str(self.features_dir),
168
+ "sessions_dir": str(self.sessions_dir),
169
+ "spikes_dir": str(self.spikes_dir),
170
+ "tracks_dir": str(self.tracks_dir),
171
+ "archives_dir": str(self.archives_dir),
172
+ "debug": self.debug,
173
+ "verbose": self.verbose,
174
+ "auto_sync": self.auto_sync,
175
+ "color_output": self.color_output,
176
+ "max_sessions": self.max_sessions,
177
+ "session_retention_days": self.session_retention_days,
178
+ "auto_archive_sessions": self.auto_archive_sessions,
179
+ "max_query_results": self.max_query_results,
180
+ "cache_enabled": self.cache_enabled,
181
+ "cache_ttl_seconds": self.cache_ttl_seconds,
182
+ "log_level": self.log_level,
183
+ "log_file": str(self.log_file) if self.log_file else None,
184
+ }
185
+
186
+ # Global configuration instance
187
+ config: HtmlGraphConfig = HtmlGraphConfig()
188
+ else:
189
+ # Pydantic not available - config object won't work but database functions will
190
+ config = None # type: ignore