htmlgraph 0.23.0__tar.gz → 0.23.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 (286) hide show
  1. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/PKG-INFO +1 -1
  2. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/gemini-extension.json +1 -1
  3. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/pyproject.toml +1 -1
  4. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/__init__.py +1 -1
  5. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/event_log.py +28 -0
  6. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/orchestrator.py +68 -4
  7. htmlgraph-0.23.2/src/python/htmlgraph/orchestrator-system-prompt-optimized.txt +92 -0
  8. htmlgraph-0.23.2/tests/test_event_log.py +498 -0
  9. htmlgraph-0.23.0/src/python/htmlgraph/orchestrator-system-prompt-optimized.txt +0 -47
  10. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/.gitignore +0 -0
  11. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/README.md +0 -0
  12. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/agent-coordination/README.md +0 -0
  13. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/agent-coordination/demo.py +0 -0
  14. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/create_auth_track_demo.py +0 -0
  15. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/create_htmlgraph_dev_track.py +0 -0
  16. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/documentation-site/README.md +0 -0
  17. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/documentation-site/agents.json +0 -0
  18. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/documentation-site/demo.py +0 -0
  19. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/documentation-site/features/doc-api-graph.html +0 -0
  20. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/documentation-site/features/doc-api-overview.html +0 -0
  21. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/documentation-site/features/doc-api-sdk.html +0 -0
  22. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/documentation-site/features/doc-example-advanced.html +0 -0
  23. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/documentation-site/features/doc-example-basic.html +0 -0
  24. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/documentation-site/features/doc-index.html +0 -0
  25. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/documentation-site/features/doc-installation.html +0 -0
  26. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/documentation-site/features/doc-quickstart.html +0 -0
  27. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/handoff-demo.py +0 -0
  28. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/knowledge-base/README.md +0 -0
  29. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/knowledge-base/agents.json +0 -0
  30. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/knowledge-base/demo.py +0 -0
  31. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/knowledge-base/features/feat-276c615f.html +0 -0
  32. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/knowledge-base/features/feat-7a6f797d.html +0 -0
  33. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/knowledge-base/features/note-ai-agents.html +0 -0
  34. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/knowledge-base/features/note-graph-db.html +0 -0
  35. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/knowledge-base/features/note-htmlgraph.html +0 -0
  36. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/knowledge-base/features/note-web-standards.html +0 -0
  37. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/parallel_task_coordination.py +0 -0
  38. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/routing-demo.py +0 -0
  39. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/sdk_demo.py +0 -0
  40. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/todo-list/README.md +0 -0
  41. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/todo-list/demo.py +0 -0
  42. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/todo-list/index.html +0 -0
  43. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/todo-list/styles.css +0 -0
  44. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/todo-list/task-001.html +0 -0
  45. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/todo-list/task-002.html +0 -0
  46. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/todo-list/task-003.html +0 -0
  47. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/todo-list/task-004.html +0 -0
  48. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/todo-list/task-005.html +0 -0
  49. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/examples/todo-list/task-006.html +0 -0
  50. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/GEMINI.md +0 -0
  51. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/README.md +0 -0
  52. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/command_deploy.md +0 -0
  53. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/command_end.md +0 -0
  54. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/command_feature-add.md +0 -0
  55. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/command_feature-complete.md +0 -0
  56. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/command_feature-primary.md +0 -0
  57. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/command_feature-start.md +0 -0
  58. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/command_git-commit.md +0 -0
  59. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/command_help.md +0 -0
  60. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/command_init.md +0 -0
  61. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/command_plan.md +0 -0
  62. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/command_recommend.md +0 -0
  63. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/command_serve.md +0 -0
  64. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/command_spike.md +0 -0
  65. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/command_start.md +0 -0
  66. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/command_status.md +0 -0
  67. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/command_track.md +0 -0
  68. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/hooks/hooks.json +0 -0
  69. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/hooks/scripts/post-tool.sh +0 -0
  70. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/hooks/scripts/session-end.sh +0 -0
  71. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/packages/gemini-extension/hooks/scripts/session-start.sh +0 -0
  72. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/js/htmlgraph.js +0 -0
  73. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/agent_detection.py +0 -0
  74. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/agent_registry.py +0 -0
  75. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/agents.py +0 -0
  76. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/analytics/__init__.py +0 -0
  77. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/analytics/cli.py +0 -0
  78. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/analytics/cross_session.py +0 -0
  79. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/analytics/dependency.py +0 -0
  80. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/analytics/work_type.py +0 -0
  81. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/analytics_index.py +0 -0
  82. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/archive/__init__.py +0 -0
  83. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/archive/bloom.py +0 -0
  84. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/archive/fts.py +0 -0
  85. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/archive/manager.py +0 -0
  86. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/archive/search.py +0 -0
  87. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/attribute_index.py +0 -0
  88. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/builders/__init__.py +0 -0
  89. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/builders/base.py +0 -0
  90. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/builders/bug.py +0 -0
  91. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/builders/chore.py +0 -0
  92. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/builders/epic.py +0 -0
  93. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/builders/feature.py +0 -0
  94. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/builders/insight.py +0 -0
  95. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/builders/metric.py +0 -0
  96. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/builders/pattern.py +0 -0
  97. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/builders/phase.py +0 -0
  98. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/builders/spike.py +0 -0
  99. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/builders/track.py +0 -0
  100. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/cli.py +0 -0
  101. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/collections/__init__.py +0 -0
  102. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/collections/base.py +0 -0
  103. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/collections/bug.py +0 -0
  104. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/collections/chore.py +0 -0
  105. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/collections/epic.py +0 -0
  106. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/collections/feature.py +0 -0
  107. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/collections/insight.py +0 -0
  108. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/collections/metric.py +0 -0
  109. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/collections/pattern.py +0 -0
  110. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/collections/phase.py +0 -0
  111. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/collections/spike.py +0 -0
  112. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/collections/todo.py +0 -0
  113. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/context_analytics.py +0 -0
  114. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/converter.py +0 -0
  115. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/dashboard.html +0 -0
  116. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/dependency_models.py +0 -0
  117. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/deploy.py +0 -0
  118. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/deployment_models.py +0 -0
  119. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/docs/__init__.py +0 -0
  120. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/docs/docs_version.py +0 -0
  121. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/docs/metadata.py +0 -0
  122. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/docs/migrations.py +0 -0
  123. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/docs/template_engine.py +0 -0
  124. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/docs/templates/_sections/cli_reference.md.j2 +0 -0
  125. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/docs/templates/_sections/core_concepts.md.j2 +0 -0
  126. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/docs/templates/_sections/sdk_basics.md.j2 +0 -0
  127. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/docs/templates/base_agents.md.j2 +0 -0
  128. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/docs/templates/example_user_override.md.j2 +0 -0
  129. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/docs/version_check.py +0 -0
  130. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/edge_index.py +0 -0
  131. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/event_migration.py +0 -0
  132. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/exceptions.py +0 -0
  133. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/extensions/gemini/GEMINI.md +0 -0
  134. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/extensions/gemini/README.md +0 -0
  135. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/extensions/gemini/gemini-extension.json +0 -0
  136. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/extensions/gemini/hooks/hooks.json +0 -0
  137. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/extensions/gemini/hooks/scripts/post-tool.sh +0 -0
  138. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/extensions/gemini/hooks/scripts/session-end.sh +0 -0
  139. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/extensions/gemini/hooks/scripts/session-start.sh +0 -0
  140. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/file_watcher.py +0 -0
  141. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/find_api.py +0 -0
  142. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/git_events.py +0 -0
  143. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/graph.py +0 -0
  144. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/__init__.py +0 -0
  145. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/event_tracker.py +0 -0
  146. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/hooks-config.example.json +0 -0
  147. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/installer.py +0 -0
  148. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/orchestrator_reflector.py +0 -0
  149. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/post-checkout.sh +0 -0
  150. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/post-commit.sh +0 -0
  151. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/post-merge.sh +0 -0
  152. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/post_tool_use_failure.py +0 -0
  153. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/posttooluse.py +0 -0
  154. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/pre-commit.sh +0 -0
  155. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/pre-push.sh +0 -0
  156. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/pretooluse.py +0 -0
  157. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/task_enforcer.py +0 -0
  158. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/task_validator.py +0 -0
  159. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/hooks/validator.py +0 -0
  160. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/ids.py +0 -0
  161. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/index.d.ts +0 -0
  162. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/learning.py +0 -0
  163. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/mcp_server.py +0 -0
  164. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/models.py +0 -0
  165. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/operations/README.md +0 -0
  166. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/operations/__init__.py +0 -0
  167. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/operations/analytics.py +0 -0
  168. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/operations/events.py +0 -0
  169. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/operations/hooks.py +0 -0
  170. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/operations/server.py +0 -0
  171. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/orchestration/__init__.py +0 -0
  172. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/orchestration/headless_spawner.py +0 -0
  173. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/orchestration/model_selection.py +0 -0
  174. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/orchestration/task_coordination.py +0 -0
  175. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/orchestrator.py +0 -0
  176. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/orchestrator_mode.py +0 -0
  177. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/orchestrator_validator.py +0 -0
  178. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/parallel.py +0 -0
  179. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/parser.py +0 -0
  180. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/planning.py +0 -0
  181. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/query_builder.py +0 -0
  182. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/routing.py +0 -0
  183. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/scripts/__init__.py +0 -0
  184. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/scripts/deploy.py +0 -0
  185. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/sdk.py +0 -0
  186. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/server.py +0 -0
  187. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/services/__init__.py +0 -0
  188. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/services/claiming.py +0 -0
  189. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/session_manager.py +0 -0
  190. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/session_warning.py +0 -0
  191. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/setup.py +0 -0
  192. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/spike_index.py +0 -0
  193. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/styles.css +0 -0
  194. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/sync_docs.py +0 -0
  195. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/templates/AGENTS.md.template +0 -0
  196. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/templates/CLAUDE.md.template +0 -0
  197. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/templates/GEMINI.md.template +0 -0
  198. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/track_builder.py +0 -0
  199. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/track_manager.py +0 -0
  200. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/transcript.py +0 -0
  201. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/transcript_analytics.py +0 -0
  202. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/types.py +0 -0
  203. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/watch.py +0 -0
  204. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/src/python/htmlgraph/work_type_utils.py +0 -0
  205. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/benchmarks/README.md +0 -0
  206. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/benchmarks/__init__.py +0 -0
  207. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/benchmarks/bench_graph.py +0 -0
  208. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/benchmarks/conftest.py +0 -0
  209. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/integration/multi_agent/README.md +0 -0
  210. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/integration/multi_agent/__init__.py +0 -0
  211. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/integration/multi_agent/test_agent_quirks.py +0 -0
  212. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/integration/multi_agent/test_git_continuity_spine.py +0 -0
  213. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/integration/test_deployment_workflow.py +0 -0
  214. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/integration/test_handoff_routing.py +0 -0
  215. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/integration/test_multi_agent_coordination.py +0 -0
  216. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/js/README.md +0 -0
  217. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/js/test_htmlgraph.html +0 -0
  218. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/operations/__init__.py +0 -0
  219. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/operations/test_hooks.py +0 -0
  220. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/operations/test_server.py +0 -0
  221. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/__init__.py +0 -0
  222. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_agent_detection.py +0 -0
  223. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_analytics.py +0 -0
  224. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_archive_manager.py +0 -0
  225. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_archive_search.py +0 -0
  226. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_auto_spike.py +0 -0
  227. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_claiming.py +0 -0
  228. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_cli_commands.py +0 -0
  229. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_collection_filter.py +0 -0
  230. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_cross_agent_attribution.py +0 -0
  231. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_cross_session_analytics.py +0 -0
  232. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_dashboard_ui.py +0 -0
  233. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_delete.py +0 -0
  234. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_deploy.py +0 -0
  235. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_drift_parent_activity.py +0 -0
  236. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_drift_queue_cleanup.py +0 -0
  237. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_edge_index.py +0 -0
  238. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_event_index.py +0 -0
  239. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_event_query.py +0 -0
  240. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_find_api.py +0 -0
  241. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_git_events.py +0 -0
  242. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_graph_traversal.py +0 -0
  243. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_handoff.py +0 -0
  244. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_headless_spawner.py +0 -0
  245. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_ids.py +0 -0
  246. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_install_hooks.py +0 -0
  247. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_lifecycle.py +0 -0
  248. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_mcp_server.py +0 -0
  249. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_mcp_stdio_transport.py +0 -0
  250. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_models.py +0 -0
  251. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_opencode_integration.py +0 -0
  252. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_orchestration.py +0 -0
  253. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_orchestrator_circuit_breaker.py +0 -0
  254. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_orchestrator_cli.py +0 -0
  255. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_orchestrator_enforce_hook.py +0 -0
  256. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_orchestrator_mode.py +0 -0
  257. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_plugin_update_preservation.py +0 -0
  258. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_post_tool_use_failure.py +0 -0
  259. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_pre_work_validation_integration.py +0 -0
  260. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_query_builder.py +0 -0
  261. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_query_cache.py +0 -0
  262. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_query_compilation.py +0 -0
  263. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_routing.py +0 -0
  264. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_sdk_discoverability.py +0 -0
  265. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_sdk_get_active_work_item.py +0 -0
  266. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_session_cleanup.py +0 -0
  267. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_session_continuity.py +0 -0
  268. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_session_start_info_validation.py +0 -0
  269. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_system_overhead_drift.py +0 -0
  270. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_template_system.py +0 -0
  271. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_todo_collection.py +0 -0
  272. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_track_loading.py +0 -0
  273. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_transcript_linking.py +0 -0
  274. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_update_preserves_incoming_edges.py +0 -0
  275. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_validate_work_hook.py +0 -0
  276. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_version_migration.py +0 -0
  277. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_work_queue.py +0 -0
  278. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/python/test_work_type.py +0 -0
  279. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/test_agent_routing.py +0 -0
  280. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/test_cli_output_snapshots.py +0 -0
  281. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/test_cli_sdk_parity.py +0 -0
  282. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/test_deployment_models.py +0 -0
  283. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/test_orchestrator_validator.py +0 -0
  284. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/test_sdk_operations.py +0 -0
  285. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/test_transaction_snapshot.py +0 -0
  286. {htmlgraph-0.23.0 → htmlgraph-0.23.2}/tests/test_transcript.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: htmlgraph
3
- Version: 0.23.0
3
+ Version: 0.23.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.23.0",
3
+ "version": "0.23.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.23.0"
3
+ version = "0.23.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"
@@ -84,7 +84,7 @@ from htmlgraph.types import (
84
84
  )
85
85
  from htmlgraph.work_type_utils import infer_work_type, infer_work_type_from_id
86
86
 
87
- __version__ = "0.23.0"
87
+ __version__ = "0.23.2"
88
88
  __all__ = [
89
89
  # Exceptions
90
90
  "HtmlGraphError",
@@ -38,6 +38,22 @@ class EventRecord:
38
38
  session_status: str | None = None
39
39
  file_paths: list[str] | None = None
40
40
  payload: dict[str, Any] | None = None
41
+ # Phase 1: Enhanced Event Data Schema for multi-AI delegation tracking
42
+ delegated_to_ai: str | None = (
43
+ None # "gemini", "codex", "copilot", "claude", or None
44
+ )
45
+ task_id: str | None = None # Unique task ID for parallel tracking
46
+ task_status: str | None = (
47
+ None # "pending", "running", "completed", "failed", "timeout"
48
+ )
49
+ model_selected: str | None = None # Specific model (e.g., "gemini-2.0-flash")
50
+ complexity_level: str | None = None # "low", "medium", "high", "very-high"
51
+ budget_mode: str | None = None # "free", "balanced", "performance"
52
+ execution_duration_seconds: float | None = None # How long delegation took
53
+ tokens_estimated: int | None = None # Estimated token usage
54
+ tokens_actual: int | None = None # Actual token usage
55
+ cost_usd: float | None = None # Calculated cost
56
+ task_findings: str | None = None # Results from delegated task
41
57
 
42
58
  def to_json(self) -> dict[str, Any]:
43
59
  return {
@@ -56,6 +72,18 @@ class EventRecord:
56
72
  "session_status": self.session_status,
57
73
  "file_paths": self.file_paths or [],
58
74
  "payload": self.payload,
75
+ # Delegation fields
76
+ "delegated_to_ai": self.delegated_to_ai,
77
+ "task_id": self.task_id,
78
+ "task_status": self.task_status,
79
+ "model_selected": self.model_selected,
80
+ "complexity_level": self.complexity_level,
81
+ "budget_mode": self.budget_mode,
82
+ "execution_duration_seconds": self.execution_duration_seconds,
83
+ "tokens_estimated": self.tokens_estimated,
84
+ "tokens_actual": self.tokens_actual,
85
+ "cost_usd": self.cost_usd,
86
+ "task_findings": self.task_findings,
59
87
  }
60
88
 
61
89
 
@@ -107,6 +107,23 @@ def is_allowed_orchestrator_operation(tool: str, params: dict) -> tuple[bool, st
107
107
  - reason_if_not: Explanation if blocked (empty if allowed)
108
108
  - category: Operation category for logging
109
109
  """
110
+ # Get enforcement level from manager
111
+ try:
112
+ cwd = Path.cwd()
113
+ graph_dir = cwd / ".htmlgraph"
114
+ if not graph_dir.exists():
115
+ for parent in [cwd.parent, cwd.parent.parent, cwd.parent.parent.parent]:
116
+ candidate = parent / ".htmlgraph"
117
+ if candidate.exists():
118
+ graph_dir = candidate
119
+ break
120
+ manager = OrchestratorModeManager(graph_dir)
121
+ enforcement_level = (
122
+ manager.get_enforcement_level() if manager.is_enabled() else "guidance"
123
+ )
124
+ except Exception:
125
+ enforcement_level = "guidance"
126
+
110
127
  # Use OrchestratorValidator for comprehensive validation
111
128
  validator = OrchestratorValidator()
112
129
  result, reason = validator.validate_tool_use(tool, params)
@@ -121,6 +138,10 @@ def is_allowed_orchestrator_operation(tool: str, params: dict) -> tuple[bool, st
121
138
  if tool in ["Task", "AskUserQuestion", "TodoWrite"]:
122
139
  return True, "", "orchestrator-core"
123
140
 
141
+ # FIX #2: Block Skills in strict mode (must be invoked via Task delegation)
142
+ if tool == "Skill" and enforcement_level == "strict":
143
+ return False, "Skills must be invoked via Task delegation", "skill-blocked"
144
+
124
145
  # Category 2: SDK Operations - Always allowed
125
146
  if tool == "Bash":
126
147
  command = params.get("command", "")
@@ -141,11 +162,51 @@ def is_allowed_orchestrator_operation(tool: str, params: dict) -> tuple[bool, st
141
162
  if "from htmlgraph import" in command or "import htmlgraph" in command:
142
163
  return True, "", "sdk-inline"
143
164
 
165
+ # FIX #3: Check if bash command is in allowed whitelist (strict mode only)
166
+ # If we've gotten here, it's not a whitelisted command above
167
+ # Block non-whitelisted bash commands in strict mode
168
+ if enforcement_level == "strict":
169
+ # Check if it's a blocked test/build pattern (handled below)
170
+ blocked_patterns = [
171
+ r"^npm (run|test|build)",
172
+ r"^pytest",
173
+ r"^uv run pytest",
174
+ r"^python -m pytest",
175
+ r"^cargo (build|test)",
176
+ r"^mvn (compile|test|package)",
177
+ r"^make (test|build)",
178
+ ]
179
+ is_blocked_pattern = any(
180
+ re.match(pattern, command) for pattern in blocked_patterns
181
+ )
182
+
183
+ if not is_blocked_pattern:
184
+ # Not a specifically blocked pattern, but also not whitelisted
185
+ # In strict mode, we should delegate
186
+ return (
187
+ False,
188
+ f"Bash command not in allowed list. Delegate to subagent.\n\n"
189
+ f"Command: {command[:100]}",
190
+ "bash-blocked",
191
+ )
192
+
144
193
  # Category 3: Quick Lookups - Single operations only
145
194
  if tool in ["Read", "Grep", "Glob"]:
146
195
  # Check tool history to see if this is a single lookup or part of a sequence
147
196
  history = load_tool_history()
148
197
 
198
+ # FIX #4: Check for mixed exploration pattern
199
+ exploration_count = sum(
200
+ 1 for h in history[-5:] if h["tool"] in ["Read", "Grep", "Glob"]
201
+ )
202
+ if exploration_count >= 3 and enforcement_level == "strict":
203
+ return (
204
+ False,
205
+ "Multiple exploration calls detected. Delegate to Explorer agent.\n\n"
206
+ "Use Task tool with explorer subagent.",
207
+ "exploration-blocked",
208
+ )
209
+
149
210
  # Look at last 3 tool calls
150
211
  recent_same_tool = sum(1 for h in history[-3:] if h["tool"] == tool)
151
212
 
@@ -181,7 +242,7 @@ def is_allowed_orchestrator_operation(tool: str, params: dict) -> tuple[bool, st
181
242
  command = params.get("command", "")
182
243
 
183
244
  # Block compilation, testing, building (should be in subagent)
184
- blocked_patterns = [
245
+ test_build_patterns: list[tuple[str, str]] = [
185
246
  (r"^npm (run|test|build)", "npm test/build"),
186
247
  (r"^pytest", "pytest"),
187
248
  (r"^uv run pytest", "pytest"),
@@ -191,7 +252,7 @@ def is_allowed_orchestrator_operation(tool: str, params: dict) -> tuple[bool, st
191
252
  (r"^make (test|build)", "make test/build"),
192
253
  ]
193
254
 
194
- for pattern, name in blocked_patterns:
255
+ for pattern, name in test_build_patterns:
195
256
  if re.match(pattern, command):
196
257
  return (
197
258
  False,
@@ -200,8 +261,11 @@ def is_allowed_orchestrator_operation(tool: str, params: dict) -> tuple[bool, st
200
261
  "test-build-blocked",
201
262
  )
202
263
 
203
- # Default: Allow with guidance
204
- return True, "Allowed but consider if delegation would be better", "allowed-default"
264
+ # FIX #1: Remove "allowed-default" escape hatch in strict mode
265
+ if enforcement_level == "strict":
266
+ return False, "Not in allowed whitelist", "strict-blocked"
267
+ else:
268
+ return True, "Allowed in guidance mode", "guidance-allowed"
205
269
 
206
270
 
207
271
  def create_task_suggestion(tool: str, params: dict) -> str:
@@ -0,0 +1,92 @@
1
+ # ORCHESTRATOR SYSTEM PROMPT
2
+
3
+ **Core Principle:** Delegation > Direct Execution. Cascading failures consume exponentially more context than structured delegation.
4
+
5
+ ## What is HtmlGraph?
6
+
7
+ Lightweight graph database for AI coordination and human observability. HTML files = nodes, hyperlinks = edges, CSS selectors = queries. Zero dependencies, offline-first. Use SDK for ALL operations tracking.
8
+
9
+ ## Operation Backbone: HtmlGraph + Git
10
+
11
+ ALWAYS use both:
12
+ - **HtmlGraph SDK**: Track what you're doing (features, spikes, sessions, analytics)
13
+ - **Git**: Track code changes, commits, attribution
14
+ - Together: Complete project history + observability
15
+
16
+ ## Speed & Currency
17
+
18
+ - Use WebSearch for up-to-date information (check current date/time)
19
+ - Use scripting (Python, Bash) for automation
20
+ - Prefer web lookups over assumptions for time-sensitive tasks
21
+
22
+ ## Spec-Driven Development
23
+
24
+ Write specs before implementation:
25
+ - Use TrackBuilder for multi-feature planning
26
+ - Document requirements and acceptance criteria
27
+ - Pattern: Plan → Implement → Validate
28
+
29
+ ## Testing Philosophy
30
+
31
+ - UI testing: Use browser automation tools (Chrome MCP)
32
+ - Test incrementally, not at the end
33
+ - Automated testing is non-negotiable
34
+ - Quality gates: ruff, mypy, pytest
35
+
36
+ ## Layered Planning Model
37
+
38
+ Delegate planning based on complexity and inputs:
39
+
40
+ 1. **Exploration** → Gemini (affordable, high context)
41
+ - Broad research, codebase exploration, options analysis
42
+
43
+ 2. **Strategic Planning** → Claude Opus (concrete inputs needed)
44
+ - High-level architecture, elegant solutions, critical decisions
45
+
46
+ 3. **Coordination** → Claude Sonnet (mid-level)
47
+ - Feature orchestration, multi-component decisions
48
+
49
+ 4. **Execution** → Haiku (tactical)
50
+ - Implementation, file operations, testing
51
+
52
+ Execute directly ONLY:
53
+ - SDK operations (feature/spike creation)
54
+ - User clarification (AskUserQuestion)
55
+ - TodoWrite (task tracking)
56
+
57
+ ## Delegate Everything Else
58
+
59
+ Git, code changes, testing, research, deployment - DELEGATE.
60
+
61
+ **Context cost:** Direct = 7+ tool calls | Delegation = 2 tool calls
62
+
63
+ ## Quick Decision Tree
64
+
65
+ 1. SDK/TodoWrite/User question? → Execute directly
66
+ 2. Exploration/research? → Delegate to Gemini
67
+ 3. Strategic planning (with inputs)? → Delegate to Opus
68
+ 4. Everything else → DELEGATE (Sonnet/Haiku)
69
+
70
+ ## Spawner Selection (Brief)
71
+
72
+ - Code work → `/multi-ai-orchestration` skill
73
+ - Images/analysis → spawn_gemini
74
+ - Git/PRs → spawn_copilot
75
+ - Complex reasoning → spawn_claude
76
+
77
+ For detailed spawner selection, cost analysis, and patterns:
78
+ → Use `/multi-ai-orchestration` skill
79
+
80
+ ## HtmlGraph Integration
81
+
82
+ ```python
83
+ sdk = SDK(agent="orchestrator")
84
+ feature = sdk.features.create("Title").save()
85
+ Task(prompt="...", description="...")
86
+ ```
87
+
88
+ For complete patterns: → Use `/orchestrator-directives` skill
89
+
90
+ ---
91
+
92
+ **Key Insight:** Smart routing → fewer tool calls → better context → faster resolution.