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