htmlgraph 0.26.10__tar.gz → 0.26.12__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.10 → htmlgraph-0.26.12}/PKG-INFO +1 -1
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/packages/gemini-extension/gemini-extension.json +1 -1
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/pyproject.toml +1 -1
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/__init__.py +1 -1
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/cli/.htmlgraph/.session-warning-state.json +1 -1
- htmlgraph-0.26.12/src/python/htmlgraph/cli/.htmlgraph/htmlgraph.db +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/hooks/event_tracker.py +8 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/hooks/test_event_tracker.py +21 -9
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_codex_spawner.py +17 -13
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_copilot_spawner_tracking.py +57 -47
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_gemini_spawner_diagnosis.py +2 -2
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_pretooluse_event_hierarchy.py +115 -23
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/.gitignore +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/README.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/agent-coordination/README.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/agent-coordination/demo.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/create_auth_track_demo.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/create_htmlgraph_dev_track.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/demo_agent_planning.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/demo_real_project_analytics.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/demo_sdk_operations.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/documentation-site/README.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/documentation-site/agents.json +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/documentation-site/demo.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/documentation-site/features/doc-api-graph.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/documentation-site/features/doc-api-overview.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/documentation-site/features/doc-api-sdk.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/documentation-site/features/doc-example-advanced.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/documentation-site/features/doc-example-basic.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/documentation-site/features/doc-index.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/documentation-site/features/doc-installation.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/documentation-site/features/doc-quickstart.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/example_query_compilation.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/handoff-demo.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/knowledge-base/README.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/knowledge-base/agents.json +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/knowledge-base/demo.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/knowledge-base/features/feat-276c615f.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/knowledge-base/features/feat-7a6f797d.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/knowledge-base/features/note-ai-agents.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/knowledge-base/features/note-graph-db.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/knowledge-base/features/note-htmlgraph.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/knowledge-base/features/note-web-standards.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/parallel_task_coordination.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/routing-demo.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/sdk_demo.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/todo-list/README.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/todo-list/demo.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/todo-list/index.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/todo-list/styles.css +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/todo-list/task-001.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/todo-list/task-002.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/todo-list/task-003.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/todo-list/task-004.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/todo-list/task-005.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/examples/todo-list/task-006.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/packages/gemini-extension/GEMINI.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/packages/gemini-extension/README.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/packages/gemini-extension/command_deploy.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/packages/gemini-extension/command_end.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/packages/gemini-extension/command_feature-add.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/packages/gemini-extension/command_feature-complete.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/packages/gemini-extension/command_feature-primary.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/packages/gemini-extension/command_feature-start.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/packages/gemini-extension/command_git-commit.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/packages/gemini-extension/command_help.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/packages/gemini-extension/command_init.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/packages/gemini-extension/command_plan.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/packages/gemini-extension/command_recommend.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/packages/gemini-extension/command_serve.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/packages/gemini-extension/command_spike.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/packages/gemini-extension/command_start.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/packages/gemini-extension/command_status.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/packages/gemini-extension/command_track.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/packages/gemini-extension/hooks/hooks.json +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/packages/gemini-extension/hooks/scripts/post-tool.sh +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/packages/gemini-extension/hooks/scripts/session-end.sh +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/packages/gemini-extension/hooks/scripts/session-start.sh +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/js/htmlgraph.js +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/.htmlgraph/.session-warning-state.json +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/.htmlgraph/agents.json +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/.htmlgraph/htmlgraph.db +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/agent_detection.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/agent_registry.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/agents.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/analytics/__init__.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/analytics/cli.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/analytics/cross_session.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/analytics/dependency.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/analytics/work_type.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/analytics_index.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/api/__init__.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/api/main.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/api/static/htmx.min.js +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/api/static/style-redesign.css +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/api/static/style.css +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/api/templates/dashboard-redesign.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/api/templates/dashboard.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/api/templates/partials/activity-feed-hierarchical.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/api/templates/partials/activity-feed.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/api/templates/partials/agents-redesign.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/api/templates/partials/agents.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/api/templates/partials/event-traces.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/api/templates/partials/features-kanban-redesign.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/api/templates/partials/features.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/api/templates/partials/metrics-redesign.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/api/templates/partials/metrics.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/api/templates/partials/orchestration-redesign.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/api/templates/partials/orchestration.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/api/templates/partials/spawners.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/archive/__init__.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/archive/bloom.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/archive/fts.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/archive/manager.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/archive/search.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/atomic_ops.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/attribute_index.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/builders/__init__.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/builders/base.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/builders/bug.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/builders/chore.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/builders/epic.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/builders/feature.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/builders/insight.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/builders/metric.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/builders/pattern.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/builders/phase.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/builders/spike.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/builders/track.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/cigs/__init__.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/cigs/autonomy.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/cigs/cost.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/cigs/messages_basic.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/cigs/messaging.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/cigs/models.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/cigs/pattern_storage.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/cigs/patterns.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/cigs/posttool_analyzer.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/cigs/reporter.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/cigs/tracker.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/cli/.htmlgraph/agents.json +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/cli/__init__.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/cli/__main__.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/cli/analytics.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/cli/base.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/cli/constants.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/cli/core.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/cli/main.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/cli/models.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/cli/templates/__init__.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/cli/templates/cost_dashboard.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/cli/work/__init__.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/cli/work/features.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/cli/work/orchestration.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/cli/work/sessions.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/cli/work/tracks.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/cli_commands/__init__.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/cli_commands/feature.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/cli_framework.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/collections/__init__.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/collections/base.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/collections/bug.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/collections/chore.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/collections/epic.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/collections/feature.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/collections/insight.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/collections/metric.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/collections/pattern.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/collections/phase.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/collections/session.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/collections/spike.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/collections/task_delegation.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/collections/todo.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/collections/traces.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/config.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/context_analytics.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/converter.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/cost_analysis/__init__.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/cost_analysis/analyzer.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/dashboard.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/dashboard.html.backup +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/dashboard.html.bak +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/dashboard.html.bak2 +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/dashboard.html.bak3 +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/db/__init__.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/db/queries.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/db/schema.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/dependency_models.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/deploy.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/deployment_models.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/docs/API_REFERENCE.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/docs/HTTP_API.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/docs/INTEGRATION_GUIDE.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/docs/ORCHESTRATION_PATTERNS.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/docs/README.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/docs/__init__.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/docs/docs_version.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/docs/metadata.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/docs/migrations.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/docs/template_engine.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/docs/templates/_sections/cli_reference.md.j2 +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/docs/templates/_sections/core_concepts.md.j2 +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/docs/templates/_sections/sdk_basics.md.j2 +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/docs/templates/base_agents.md.j2 +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/docs/templates/example_user_override.md.j2 +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/docs/version_check.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/edge_index.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/error_handler.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/event_log.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/event_migration.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/exceptions.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/extensions/gemini/GEMINI.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/extensions/gemini/README.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/extensions/gemini/gemini-extension.json +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/extensions/gemini/hooks/hooks.json +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/extensions/gemini/hooks/scripts/post-tool.sh +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/extensions/gemini/hooks/scripts/session-end.sh +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/extensions/gemini/hooks/scripts/session-start.sh +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/file_watcher.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/find_api.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/git_events.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/graph.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/hooks/.htmlgraph/.session-warning-state.json +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/hooks/.htmlgraph/agents.json +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/hooks/.htmlgraph/index.sqlite +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/hooks/__init__.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/hooks/bootstrap.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/hooks/cigs_pretool_enforcer.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/hooks/concurrent_sessions.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/hooks/context.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/hooks/drift_handler.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/hooks/git_commands.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/hooks/hooks-config.example.json +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/hooks/installer.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/hooks/orchestrator.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/hooks/orchestrator_reflector.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/hooks/post-checkout.sh +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/hooks/post-commit.sh +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/hooks/post-merge.sh +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/hooks/post_tool_use_failure.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/hooks/post_tool_use_handler.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/hooks/posttooluse.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/hooks/pre-commit.sh +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/hooks/pre-push.sh +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/hooks/pretooluse.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/hooks/prompt_analyzer.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/hooks/session_handler.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/hooks/session_summary.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/hooks/state_manager.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/hooks/subagent_detection.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/hooks/subagent_stop.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/hooks/task_enforcer.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/hooks/task_validator.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/hooks/validator.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/ids.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/index.d.ts +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/learning.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/mcp_server.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/models.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/operations/README.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/operations/__init__.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/operations/analytics.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/operations/events.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/operations/fastapi_server.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/operations/hooks.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/operations/initialization.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/operations/initialization.py.backup +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/operations/server.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/orchestration/__init__.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/orchestration/claude_launcher.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/orchestration/command_builder.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/orchestration/headless_spawner.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/orchestration/live_events.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/orchestration/model_selection.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/orchestration/plugin_manager.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/orchestration/prompts.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/orchestration/spawners/__init__.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/orchestration/spawners/base.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/orchestration/spawners/claude.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/orchestration/spawners/codex.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/orchestration/spawners/copilot.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/orchestration/spawners/gemini.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/orchestration/subprocess_runner.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/orchestration/task_coordination.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/orchestration.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/orchestrator-system-prompt-optimized.txt +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/orchestrator.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/orchestrator_config.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/orchestrator_mode.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/orchestrator_validator.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/parallel.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/parser.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/planning.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/pydantic_models.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/quality_gates.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/query_builder.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/reflection.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/repo_hash.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/routing.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/scripts/__init__.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/scripts/deploy.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/sdk.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/server.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/services/__init__.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/services/claiming.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/session_hooks.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/session_manager.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/session_registry.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/session_state.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/session_warning.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/setup.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/spike_index.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/styles.css +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/sync_docs.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/system_prompts.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/templates/AGENTS.md.template +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/templates/CLAUDE.md.template +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/templates/GEMINI.md.template +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/templates/orchestration-view.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/track_builder.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/track_manager.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/transcript.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/transcript_analytics.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/types.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/validation.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/watch.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/src/python/htmlgraph/work_type_utils.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/benchmarks/README.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/benchmarks/__init__.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/benchmarks/bench_graph.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/benchmarks/conftest.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/hooks/__init__.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/hooks/test_bootstrap.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/hooks/test_concurrent_sessions.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/hooks/test_context.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/hooks/test_git_commands.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/hooks/test_hybrid_event_capture.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/hooks/test_prompt_analyzer.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/hooks/test_session_handler.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/hooks/test_state_manager.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/hooks/test_system_prompt_persistence.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/hooks/test_system_prompt_persistence_integration.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/multi_agent/README.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/multi_agent/__init__.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/multi_agent/test_agent_quirks.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/multi_agent/test_git_continuity_spine.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_cigs_hook_flow.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_cigs_integration.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_cigs_learning.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_complexity_assessment.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_dashboard_spawner_display.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_delegation_events.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_deployment_workflow.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_discoverability.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_edge_index_bug.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_features.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_handoff_routing.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_multi_agent_coordination.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_new_features.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_orchestration_tab.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_orchestration_with_playwright.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_orchestrator_pattern.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_orchestrator_spawner_delegation.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_phase1_userquery.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_phase4_delegation_events.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_post_compact_delegation.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_real_workitem_integration.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_redesigned_dashboard.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_spawner_integration.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_spawner_live_events.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_spawner_observability_e2e.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_spawner_routing_live.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_spawner_tool_tracking.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_task_delegation.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_user_query_events.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_websocket_realtime.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/integration/test_websocket_streaming.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/js/README.md +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/js/test_htmlgraph.html +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/manual/test-hook-input.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/operations/__init__.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/operations/test_hooks.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/operations/test_server.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/__init__.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/conftest.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_activity_feed_ui.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_agent_attribution.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_agent_detection.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_analytics.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_archive_manager.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_archive_search.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_atomic_ops.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_auto_spike.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_cigs_pretool_enforcer.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_claiming.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_cli_commands.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_cli_pydantic_models.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_cli_rich_output.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_collection_filter.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_cost_analyzer.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_cross_agent_attribution.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_cross_session_analytics.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_dashboard_attribution.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_dashboard_ui.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_delegation_fk_fix.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_delete.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_deploy.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_drift_parent_activity.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_drift_queue_cleanup.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_edge_index.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_error_handling.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_event_index.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_event_query.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_event_tracing.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_feature_track_linkage_phase1.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_find_api.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_git_events.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_graph_traversal.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_handoff.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_headless_spawner.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_headless_spawner_parent_session.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_ids.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_install_hooks.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_lifecycle.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_mcp_server.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_mcp_stdio_transport.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_models.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_orchestration.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_orchestrator_circuit_breaker.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_orchestrator_cli.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_orchestrator_enforce_hook.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_orchestrator_mode.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_parent_child_event_linking.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_parent_child_linking.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_parent_linking_integration.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_pattern_storage.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_plugin_update_preservation.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_post_tool_use_failure.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_post_tool_use_handler.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_posttooluse_cigs.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_pre_commit_hooks.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_pre_work_validation_integration.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_quality_gates.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_query_builder.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_query_cache.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_query_compilation.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_reflection.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_repo_hash.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_routing.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_sdk_discoverability.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_sdk_get_active_work_item.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_sdk_parent_session.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_sdk_sqlite_integration.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_session_cleanup.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_session_continuity.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_session_integration.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_session_registry.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_session_start_cigs.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_session_start_info_validation.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_session_state_manager.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_spawner_agents.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_spawner_routing.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_sqlite_schema.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_stop_cigs.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_system_overhead_drift.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_template_system.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_todo_collection.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_traces_collection.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_track_loading.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_transcript_linking.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_update_preserves_incoming_edges.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_user_prompt_submit_cigs.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_validate_work_hook.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_version_migration.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_violation_tracker.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_work_queue.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/python/test_work_type.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/test_agent_routing.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/test_autonomy_recommender.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/test_cigs_cli.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/test_cigs_cost_calculator.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/test_cigs_cost_reporter.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/test_cigs_imperative_messages.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/test_cigs_messages_basic.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/test_cli_output_snapshots.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/test_cli_sdk_parity.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/test_deployment_models.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/test_event_log.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/test_hybrid_event_capture.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/test_orchestrator_config.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/test_orchestrator_validator.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/test_pattern_detector.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/test_sdk_api_surface.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/test_sdk_operations.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/tests/test_transaction_snapshot.py +0 -0
- {htmlgraph-0.26.10 → htmlgraph-0.26.12}/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.12
|
|
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.12",
|
|
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",
|
|
Binary file
|
|
@@ -773,6 +773,7 @@ def track_event(hook_type: str, hook_input: dict[str, Any]) -> dict[str, Any]:
|
|
|
773
773
|
# NOTE: Claude Code passes the SAME session_id to parent and subagent, so we CAN'T use
|
|
774
774
|
# session_id to distinguish them. Instead, look for the most recent task_delegation event
|
|
775
775
|
# and if found with status='started', we ARE the subagent.
|
|
776
|
+
task_event_id_from_db = None # Track this for later use as parent_event_id
|
|
776
777
|
if not subagent_type and db and db.connection:
|
|
777
778
|
try:
|
|
778
779
|
cursor = db.connection.cursor()
|
|
@@ -795,6 +796,9 @@ def track_event(hook_type: str, hook_input: dict[str, Any]) -> dict[str, Any]:
|
|
|
795
796
|
# (Claude Code uses the same session_id for both parent and subagent)
|
|
796
797
|
subagent_type = detected_subagent_type or "general-purpose"
|
|
797
798
|
parent_session_id = parent_sess
|
|
799
|
+
task_event_id_from_db = (
|
|
800
|
+
task_event_id # Store for later use as parent_event_id
|
|
801
|
+
)
|
|
798
802
|
print(
|
|
799
803
|
f"DEBUG subagent detection (database): Detected active task_delegation "
|
|
800
804
|
f"type={subagent_type}, parent_session={parent_session_id}, "
|
|
@@ -1039,6 +1043,10 @@ def track_event(hook_type: str, hook_input: dict[str, Any]) -> dict[str, Any]:
|
|
|
1039
1043
|
)
|
|
1040
1044
|
if env_parent:
|
|
1041
1045
|
parent_activity_id = env_parent
|
|
1046
|
+
# If we detected a Task delegation event via database detection (Method 3),
|
|
1047
|
+
# use that as the parent for all tool calls within the subagent
|
|
1048
|
+
elif task_event_id_from_db:
|
|
1049
|
+
parent_activity_id = task_event_id_from_db
|
|
1042
1050
|
# Query database for most recent UserQuery event as parent
|
|
1043
1051
|
# Database is the single source of truth for parent-child linking
|
|
1044
1052
|
elif db:
|
|
@@ -295,9 +295,13 @@ class TestDetectAgentFromEnvironment:
|
|
|
295
295
|
with mock.patch.dict(
|
|
296
296
|
os.environ, {"HTMLGRAPH_SUBAGENT_TYPE": "researcher"}, clear=True
|
|
297
297
|
):
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
298
|
+
with mock.patch(
|
|
299
|
+
"htmlgraph.hooks.event_tracker.get_model_from_status_cache",
|
|
300
|
+
return_value=None,
|
|
301
|
+
):
|
|
302
|
+
agent_id, model = detect_agent_from_environment()
|
|
303
|
+
assert agent_id == "researcher"
|
|
304
|
+
assert model is None
|
|
301
305
|
|
|
302
306
|
def test_detect_claude_model(self):
|
|
303
307
|
"""Test detection with CLAUDE_MODEL env var returns model separately."""
|
|
@@ -323,16 +327,24 @@ class TestDetectAgentFromEnvironment:
|
|
|
323
327
|
"""Test detection with HTMLGRAPH_PARENT_AGENT env var."""
|
|
324
328
|
env = {"HTMLGRAPH_PARENT_AGENT": "parent-agent"}
|
|
325
329
|
with mock.patch.dict(os.environ, env, clear=True):
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
330
|
+
with mock.patch(
|
|
331
|
+
"htmlgraph.hooks.event_tracker.get_model_from_status_cache",
|
|
332
|
+
return_value=None,
|
|
333
|
+
):
|
|
334
|
+
agent_id, model = detect_agent_from_environment()
|
|
335
|
+
assert agent_id == "parent-agent"
|
|
336
|
+
assert model is None
|
|
329
337
|
|
|
330
338
|
def test_detect_fallback_to_claude_code(self):
|
|
331
339
|
"""Test fallback to 'claude-code' when no env vars set."""
|
|
332
340
|
with mock.patch.dict(os.environ, {}, clear=True):
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
341
|
+
with mock.patch(
|
|
342
|
+
"htmlgraph.hooks.event_tracker.get_model_from_status_cache",
|
|
343
|
+
return_value=None,
|
|
344
|
+
):
|
|
345
|
+
agent_id, model = detect_agent_from_environment()
|
|
346
|
+
assert agent_id == "claude-code"
|
|
347
|
+
assert model is None
|
|
336
348
|
|
|
337
349
|
def test_detect_priority_order(self):
|
|
338
350
|
"""Test environment variable priority order."""
|
|
@@ -50,12 +50,10 @@ def test_codex_cli_availability():
|
|
|
50
50
|
print("=" * 80)
|
|
51
51
|
|
|
52
52
|
import subprocess
|
|
53
|
+
|
|
53
54
|
try:
|
|
54
55
|
result = subprocess.run(
|
|
55
|
-
["codex", "--version"],
|
|
56
|
-
capture_output=True,
|
|
57
|
-
text=True,
|
|
58
|
-
timeout=5
|
|
56
|
+
["codex", "--version"], capture_output=True, text=True, timeout=5
|
|
59
57
|
)
|
|
60
58
|
print(f"✅ Codex CLI found: {result.stdout.strip()}")
|
|
61
59
|
return True
|
|
@@ -82,10 +80,10 @@ def test_codex_spawner_simple():
|
|
|
82
80
|
output_json=True,
|
|
83
81
|
full_auto=True,
|
|
84
82
|
track_in_htmlgraph=False, # Disable tracking for simple test
|
|
85
|
-
timeout=30
|
|
83
|
+
timeout=30,
|
|
86
84
|
)
|
|
87
85
|
|
|
88
|
-
print(
|
|
86
|
+
print("\nResult:")
|
|
89
87
|
print(f" Success: {result.success}")
|
|
90
88
|
print(f" Response: {result.response[:200] if result.response else 'None'}")
|
|
91
89
|
print(f" Error: {result.error}")
|
|
@@ -116,6 +114,7 @@ def test_database_events():
|
|
|
116
114
|
print("=" * 80)
|
|
117
115
|
|
|
118
116
|
import sqlite3
|
|
117
|
+
|
|
119
118
|
from htmlgraph.config import get_database_path
|
|
120
119
|
|
|
121
120
|
db_path = get_database_path()
|
|
@@ -157,7 +156,9 @@ def test_database_events():
|
|
|
157
156
|
""")
|
|
158
157
|
linked_count = cursor.fetchone()[0]
|
|
159
158
|
|
|
160
|
-
print(
|
|
159
|
+
print(
|
|
160
|
+
f"✅ Parent event linking: {linked_count} subprocess.codex events have parent_event_id"
|
|
161
|
+
)
|
|
161
162
|
|
|
162
163
|
conn.close()
|
|
163
164
|
return True
|
|
@@ -174,6 +175,7 @@ def test_error_analysis():
|
|
|
174
175
|
print("=" * 80)
|
|
175
176
|
|
|
176
177
|
import sqlite3
|
|
178
|
+
|
|
177
179
|
from htmlgraph.config import get_database_path
|
|
178
180
|
|
|
179
181
|
try:
|
|
@@ -204,17 +206,17 @@ def test_error_analysis():
|
|
|
204
206
|
"chatgpt_plan": 0,
|
|
205
207
|
"model_not_supported": 0,
|
|
206
208
|
"authentication": 0,
|
|
207
|
-
"other": 0
|
|
209
|
+
"other": 0,
|
|
208
210
|
}
|
|
209
211
|
|
|
210
212
|
for (output,) in errors:
|
|
211
|
-
print(
|
|
213
|
+
print("Error output sample:")
|
|
212
214
|
print(f" {output[:200]}...")
|
|
213
215
|
print()
|
|
214
216
|
|
|
215
217
|
# Parse JSONL error messages
|
|
216
218
|
try:
|
|
217
|
-
for line in output.split(
|
|
219
|
+
for line in output.split("\n"):
|
|
218
220
|
if not line.strip():
|
|
219
221
|
continue
|
|
220
222
|
try:
|
|
@@ -338,9 +340,11 @@ def main():
|
|
|
338
340
|
print("DIAGNOSTIC SUMMARY")
|
|
339
341
|
print("=" * 80)
|
|
340
342
|
print(f"Codex CLI Available: {'✅ YES' if cli_available else '❌ NO'}")
|
|
341
|
-
print(
|
|
342
|
-
|
|
343
|
-
|
|
343
|
+
print(
|
|
344
|
+
f"CodexSpawner Working: {'✅ YES' if spawner_works else '❌ NO (API access blocked)'}"
|
|
345
|
+
)
|
|
346
|
+
print("Event Tracking: ✅ YES (SpawnerEventTracker integration working)")
|
|
347
|
+
print("Root Cause: ❌ ChatGPT account tier limitation")
|
|
344
348
|
print("=" * 80)
|
|
345
349
|
|
|
346
350
|
|
|
@@ -16,10 +16,11 @@ from datetime import datetime, timezone
|
|
|
16
16
|
from pathlib import Path
|
|
17
17
|
|
|
18
18
|
# Add plugin agents directory to path for SpawnerEventTracker
|
|
19
|
-
PLUGIN_AGENTS_DIR =
|
|
19
|
+
PLUGIN_AGENTS_DIR = (
|
|
20
|
+
Path(__file__).parent / "packages/claude-plugin/.claude-plugin/agents"
|
|
21
|
+
)
|
|
20
22
|
sys.path.insert(0, str(PLUGIN_AGENTS_DIR))
|
|
21
23
|
|
|
22
|
-
from htmlgraph import SDK
|
|
23
24
|
from htmlgraph.config import get_database_path
|
|
24
25
|
from htmlgraph.db.schema import HtmlGraphDB
|
|
25
26
|
from htmlgraph.orchestration import CopilotSpawner
|
|
@@ -41,9 +42,9 @@ def setup_parent_event_context(db: HtmlGraphDB, session_id: str) -> tuple[str, s
|
|
|
41
42
|
task_delegation_event_id = f"event-{uuid.uuid4().hex[:8]}"
|
|
42
43
|
start_time = datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M:%S")
|
|
43
44
|
|
|
44
|
-
print(f"\n{'='*80}")
|
|
45
|
+
print(f"\n{'=' * 80}")
|
|
45
46
|
print("SETUP: Creating parent event context")
|
|
46
|
-
print(f"{'='*80}")
|
|
47
|
+
print(f"{'=' * 80}")
|
|
47
48
|
print(f"Session ID: {session_id}")
|
|
48
49
|
print(f"UserQuery Event ID: {user_query_event_id}")
|
|
49
50
|
print(f"Task Delegation Event ID: {task_delegation_event_id}")
|
|
@@ -87,7 +88,7 @@ def setup_parent_event_context(db: HtmlGraphDB, session_id: str) -> tuple[str, s
|
|
|
87
88
|
)
|
|
88
89
|
db.connection.commit()
|
|
89
90
|
|
|
90
|
-
print(
|
|
91
|
+
print("\n✅ Parent events created in database")
|
|
91
92
|
return user_query_event_id, task_delegation_event_id
|
|
92
93
|
|
|
93
94
|
|
|
@@ -99,9 +100,9 @@ def setup_environment(session_id: str, parent_event_id: str) -> None:
|
|
|
99
100
|
session_id: Session ID
|
|
100
101
|
parent_event_id: Parent event ID (task delegation)
|
|
101
102
|
"""
|
|
102
|
-
print(f"\n{'='*80}")
|
|
103
|
+
print(f"\n{'=' * 80}")
|
|
103
104
|
print("SETUP: Exporting parent context to environment")
|
|
104
|
-
print(f"{'='*80}")
|
|
105
|
+
print(f"{'=' * 80}")
|
|
105
106
|
|
|
106
107
|
os.environ["HTMLGRAPH_PARENT_EVENT"] = parent_event_id
|
|
107
108
|
os.environ["HTMLGRAPH_PARENT_SESSION"] = session_id
|
|
@@ -110,7 +111,7 @@ def setup_environment(session_id: str, parent_event_id: str) -> None:
|
|
|
110
111
|
|
|
111
112
|
print(f"HTMLGRAPH_PARENT_EVENT: {parent_event_id}")
|
|
112
113
|
print(f"HTMLGRAPH_PARENT_SESSION: {session_id}")
|
|
113
|
-
print(
|
|
114
|
+
print("✅ Environment configured")
|
|
114
115
|
|
|
115
116
|
|
|
116
117
|
def invoke_copilot_spawner(
|
|
@@ -127,9 +128,9 @@ def invoke_copilot_spawner(
|
|
|
127
128
|
Returns:
|
|
128
129
|
Dict with result and metadata
|
|
129
130
|
"""
|
|
130
|
-
print(f"\n{'='*80}")
|
|
131
|
+
print(f"\n{'=' * 80}")
|
|
131
132
|
print("INVOCATION: Spawning Copilot with tracking")
|
|
132
|
-
print(f"{'='*80}")
|
|
133
|
+
print(f"{'=' * 80}")
|
|
133
134
|
|
|
134
135
|
spawner = CopilotSpawner()
|
|
135
136
|
|
|
@@ -148,8 +149,8 @@ Please recommend:
|
|
|
148
149
|
print(f"Prompt: {prompt[:100]}...")
|
|
149
150
|
print(f"Tracker: {tracker}")
|
|
150
151
|
print(f"Parent Event ID: {parent_event_id}")
|
|
151
|
-
print(
|
|
152
|
-
print(
|
|
152
|
+
print("Track in HtmlGraph: True")
|
|
153
|
+
print("Allow all tools: True")
|
|
153
154
|
|
|
154
155
|
result = spawner.spawn(
|
|
155
156
|
prompt=prompt,
|
|
@@ -186,24 +187,25 @@ def validate_results(
|
|
|
186
187
|
Returns:
|
|
187
188
|
True if validation passed, False otherwise
|
|
188
189
|
"""
|
|
189
|
-
print(f"\n{'='*80}")
|
|
190
|
+
print(f"\n{'=' * 80}")
|
|
190
191
|
print("VALIDATION: Checking event hierarchy in database")
|
|
191
|
-
print(f"{'='*80}")
|
|
192
|
+
print(f"{'=' * 80}")
|
|
192
193
|
|
|
193
194
|
result = result_data["result"]
|
|
194
|
-
prompt = result_data["prompt"]
|
|
195
195
|
|
|
196
196
|
# Check AIResult structure
|
|
197
|
-
print(
|
|
197
|
+
print("\n1. AIResult Validation:")
|
|
198
198
|
print(f" Success: {result.success}")
|
|
199
199
|
print(f" Response length: {len(result.response) if result.response else 0}")
|
|
200
200
|
print(f" Error: {result.error}")
|
|
201
|
-
print(
|
|
201
|
+
print(
|
|
202
|
+
f" Tracked events: {len(result.tracked_events) if result.tracked_events else 0}"
|
|
203
|
+
)
|
|
202
204
|
|
|
203
205
|
if not result.success:
|
|
204
206
|
print(f"\n⚠️ Copilot execution failed: {result.error}")
|
|
205
|
-
print(
|
|
206
|
-
print(
|
|
207
|
+
print(" This is expected if Copilot CLI is not installed")
|
|
208
|
+
print(" Continuing validation of event tracking structure...")
|
|
207
209
|
|
|
208
210
|
# Query all events in this session
|
|
209
211
|
cursor = db.connection.cursor()
|
|
@@ -245,7 +247,7 @@ def validate_results(
|
|
|
245
247
|
elif parent_event_id == task_delegation_event_id:
|
|
246
248
|
indent = " "
|
|
247
249
|
|
|
248
|
-
print(f"{indent}[{i+1}] {tool_name} ({event_type})")
|
|
250
|
+
print(f"{indent}[{i + 1}] {tool_name} ({event_type})")
|
|
249
251
|
print(f"{indent} Event ID: {event_id}")
|
|
250
252
|
print(f"{indent} Agent: {agent_id}")
|
|
251
253
|
print(f"{indent} Parent: {parent_event_id or 'ROOT'}")
|
|
@@ -254,34 +256,38 @@ def validate_results(
|
|
|
254
256
|
print(f"{indent} Summary: {input_summary[:60]}...")
|
|
255
257
|
|
|
256
258
|
# Validate hierarchy
|
|
257
|
-
print(
|
|
259
|
+
print("\n3. Hierarchy Validation:")
|
|
258
260
|
|
|
259
261
|
# Check UserQuery exists
|
|
260
262
|
user_query = [e for e in events if e[0] == user_query_event_id]
|
|
261
263
|
if user_query:
|
|
262
|
-
print(
|
|
264
|
+
print(" ✅ UserQuery event found (root)")
|
|
263
265
|
else:
|
|
264
|
-
print(
|
|
266
|
+
print(" ❌ UserQuery event NOT found")
|
|
265
267
|
validation_passed = False
|
|
266
268
|
|
|
267
269
|
# Check Task delegation exists and is child of UserQuery
|
|
268
270
|
task_delegation = [e for e in events if e[0] == task_delegation_event_id]
|
|
269
271
|
if task_delegation and task_delegation[0][5] == user_query_event_id:
|
|
270
|
-
print(
|
|
272
|
+
print(" ✅ Task delegation event found (child of UserQuery)")
|
|
271
273
|
else:
|
|
272
|
-
print(
|
|
274
|
+
print(" ❌ Task delegation event NOT properly linked")
|
|
273
275
|
validation_passed = False
|
|
274
276
|
|
|
275
277
|
# Check subprocess events exist and are children of Task delegation
|
|
276
278
|
subprocess_events = [
|
|
277
|
-
e
|
|
279
|
+
e
|
|
280
|
+
for e in events
|
|
281
|
+
if e[5] == task_delegation_event_id and e[3] == "subprocess.copilot"
|
|
278
282
|
]
|
|
279
283
|
if subprocess_events:
|
|
280
284
|
print(
|
|
281
285
|
f" ✅ {len(subprocess_events)} subprocess event(s) found (children of Task delegation)"
|
|
282
286
|
)
|
|
283
287
|
else:
|
|
284
|
-
print(
|
|
288
|
+
print(
|
|
289
|
+
" ⚠️ No subprocess events found (expected if Copilot CLI not available)"
|
|
290
|
+
)
|
|
285
291
|
|
|
286
292
|
# Check for activity tracking events (copilot_start, copilot_result)
|
|
287
293
|
activity_events = [
|
|
@@ -292,15 +298,19 @@ def validate_results(
|
|
|
292
298
|
if activity_events:
|
|
293
299
|
print(f" ✅ {len(activity_events)} activity tracking event(s) found")
|
|
294
300
|
else:
|
|
295
|
-
print(
|
|
301
|
+
print(" ⚠️ No activity tracking events found")
|
|
296
302
|
|
|
297
303
|
# Summary
|
|
298
|
-
print(f"\n{'='*80}")
|
|
304
|
+
print(f"\n{'=' * 80}")
|
|
299
305
|
print("SUMMARY")
|
|
300
|
-
print(f"{'='*80}")
|
|
306
|
+
print(f"{'=' * 80}")
|
|
301
307
|
print(f"Total events in session: {len(events)}")
|
|
302
|
-
print(
|
|
303
|
-
|
|
308
|
+
print(
|
|
309
|
+
f"UserQuery events: {len([e for e in events if e[2] == 'tool_call' and e[3] == 'UserPromptSubmit'])}"
|
|
310
|
+
)
|
|
311
|
+
print(
|
|
312
|
+
f"Task delegation events: {len([e for e in events if e[2] == 'task_delegation'])}"
|
|
313
|
+
)
|
|
304
314
|
print(f"Subprocess events: {len(subprocess_events)}")
|
|
305
315
|
print(f"Activity events: {len(activity_events)}")
|
|
306
316
|
print(f"\nValidation: {'✅ PASSED' if validation_passed else '❌ FAILED'}")
|
|
@@ -310,9 +320,9 @@ def validate_results(
|
|
|
310
320
|
|
|
311
321
|
def main() -> int:
|
|
312
322
|
"""Run the complete test workflow."""
|
|
313
|
-
print(f"\n{'#'*80}")
|
|
323
|
+
print(f"\n{'#' * 80}")
|
|
314
324
|
print("# CopilotSpawner Parent Event Context Test")
|
|
315
|
-
print(f"{'#'*80}")
|
|
325
|
+
print(f"{'#' * 80}")
|
|
316
326
|
|
|
317
327
|
try:
|
|
318
328
|
# Initialize database
|
|
@@ -321,7 +331,7 @@ def main() -> int:
|
|
|
321
331
|
|
|
322
332
|
if not db_path.exists():
|
|
323
333
|
print(f"❌ Database not found at {db_path}")
|
|
324
|
-
print(
|
|
334
|
+
print(" Run: htmlgraph init")
|
|
325
335
|
return 1
|
|
326
336
|
|
|
327
337
|
db = HtmlGraphDB(str(db_path))
|
|
@@ -339,9 +349,9 @@ def main() -> int:
|
|
|
339
349
|
setup_environment(session_id, task_delegation_event_id)
|
|
340
350
|
|
|
341
351
|
# Step 3: Create tracker with parent context
|
|
342
|
-
print(f"\n{'='*80}")
|
|
352
|
+
print(f"\n{'=' * 80}")
|
|
343
353
|
print("SETUP: Creating SpawnerEventTracker")
|
|
344
|
-
print(f"{'='*80}")
|
|
354
|
+
print(f"{'=' * 80}")
|
|
345
355
|
|
|
346
356
|
tracker = SpawnerEventTracker(
|
|
347
357
|
delegation_event_id=task_delegation_event_id,
|
|
@@ -351,12 +361,12 @@ def main() -> int:
|
|
|
351
361
|
)
|
|
352
362
|
tracker.db = db # Ensure tracker uses the same database
|
|
353
363
|
|
|
354
|
-
print(
|
|
364
|
+
print("Tracker created:")
|
|
355
365
|
print(f" Delegation Event ID: {task_delegation_event_id}")
|
|
356
|
-
print(
|
|
357
|
-
print(
|
|
366
|
+
print(" Parent Agent: claude")
|
|
367
|
+
print(" Spawner Type: copilot")
|
|
358
368
|
print(f" Session ID: {session_id}")
|
|
359
|
-
print(
|
|
369
|
+
print("✅ Tracker initialized")
|
|
360
370
|
|
|
361
371
|
# Step 4: Invoke CopilotSpawner
|
|
362
372
|
result_data = invoke_copilot_spawner(tracker, task_delegation_event_id)
|
|
@@ -373,22 +383,22 @@ def main() -> int:
|
|
|
373
383
|
# Step 6: Display response (if successful)
|
|
374
384
|
result = result_data["result"]
|
|
375
385
|
if result.success and result.response:
|
|
376
|
-
print(f"\n{'='*80}")
|
|
386
|
+
print(f"\n{'=' * 80}")
|
|
377
387
|
print("COPILOT RESPONSE")
|
|
378
|
-
print(f"{'='*80}")
|
|
388
|
+
print(f"{'=' * 80}")
|
|
379
389
|
print(result.response)
|
|
380
390
|
|
|
381
|
-
print(f"\n{'#'*80}")
|
|
391
|
+
print(f"\n{'#' * 80}")
|
|
382
392
|
print(f"# Test {'PASSED' if validation_passed else 'FAILED'}")
|
|
383
|
-
print(f"{'#'*80}\n")
|
|
393
|
+
print(f"{'#' * 80}\n")
|
|
384
394
|
|
|
385
395
|
return 0 if validation_passed else 1
|
|
386
396
|
|
|
387
397
|
except KeyboardInterrupt:
|
|
388
|
-
print(
|
|
398
|
+
print("\n\n⚠️ Test interrupted by user")
|
|
389
399
|
return 130
|
|
390
400
|
except Exception as e:
|
|
391
|
-
print(
|
|
401
|
+
print("\n\n❌ Test failed with exception:")
|
|
392
402
|
print(f" {type(e).__name__}: {e}")
|
|
393
403
|
import traceback
|
|
394
404
|
|
|
@@ -27,7 +27,7 @@ def test_basic_gemini():
|
|
|
27
27
|
output_format="json",
|
|
28
28
|
model="gemini-2.0-flash",
|
|
29
29
|
track_in_htmlgraph=False,
|
|
30
|
-
timeout=30
|
|
30
|
+
timeout=30,
|
|
31
31
|
)
|
|
32
32
|
|
|
33
33
|
print(f"Success: {result.success}")
|
|
@@ -49,7 +49,7 @@ def test_basic_gemini():
|
|
|
49
49
|
output_format="stream-json",
|
|
50
50
|
model="gemini-2.0-flash",
|
|
51
51
|
track_in_htmlgraph=False,
|
|
52
|
-
timeout=30
|
|
52
|
+
timeout=30,
|
|
53
53
|
)
|
|
54
54
|
|
|
55
55
|
print(f"Success: {result2.success}")
|