htmlgraph 0.26.5__tar.gz → 0.26.6__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.5 → htmlgraph-0.26.6}/.gitignore +8 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/PKG-INFO +1 -1
- htmlgraph-0.26.6/examples/demo_agent_planning.py +172 -0
- htmlgraph-0.26.6/examples/demo_real_project_analytics.py +130 -0
- htmlgraph-0.26.6/examples/demo_sdk_operations.py +163 -0
- htmlgraph-0.26.6/examples/example_query_compilation.py +100 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/packages/gemini-extension/gemini-extension.json +1 -1
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/pyproject.toml +2 -2
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/.htmlgraph/.session-warning-state.json +1 -1
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/__init__.py +1 -1
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/api/main.py +50 -10
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/api/templates/dashboard-redesign.html +608 -54
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/api/templates/partials/activity-feed.html +21 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/api/templates/partials/features.html +81 -12
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/api/templates/partials/orchestration.html +35 -0
- htmlgraph-0.26.6/src/python/htmlgraph/cli/.htmlgraph/.session-warning-state.json +6 -0
- htmlgraph-0.26.6/src/python/htmlgraph/cli/.htmlgraph/agents.json +72 -0
- htmlgraph-0.26.6/src/python/htmlgraph/cli/__init__.py +42 -0
- htmlgraph-0.26.6/src/python/htmlgraph/cli/__main__.py +6 -0
- htmlgraph-0.26.6/src/python/htmlgraph/cli/analytics.py +939 -0
- htmlgraph-0.26.6/src/python/htmlgraph/cli/base.py +660 -0
- htmlgraph-0.26.6/src/python/htmlgraph/cli/constants.py +206 -0
- htmlgraph-0.26.6/src/python/htmlgraph/cli/core.py +856 -0
- htmlgraph-0.26.6/src/python/htmlgraph/cli/main.py +143 -0
- htmlgraph-0.26.6/src/python/htmlgraph/cli/models.py +462 -0
- htmlgraph-0.26.6/src/python/htmlgraph/cli/templates/__init__.py +1 -0
- htmlgraph-0.26.6/src/python/htmlgraph/cli/templates/cost_dashboard.py +398 -0
- htmlgraph-0.26.6/src/python/htmlgraph/cli/work/__init__.py +159 -0
- htmlgraph-0.26.6/src/python/htmlgraph/cli/work/features.py +567 -0
- htmlgraph-0.26.6/src/python/htmlgraph/cli/work/orchestration.py +675 -0
- htmlgraph-0.26.6/src/python/htmlgraph/cli/work/sessions.py +465 -0
- htmlgraph-0.26.6/src/python/htmlgraph/cli/work/tracks.py +485 -0
- htmlgraph-0.26.6/src/python/htmlgraph/dashboard.html.backup +6592 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/db/schema.py +8 -3
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/docs/ORCHESTRATION_PATTERNS.md +20 -13
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/docs/README.md +2 -3
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/hooks/event_tracker.py +157 -25
- htmlgraph-0.26.6/src/python/htmlgraph/hooks/git_commands.py +175 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/hooks/orchestrator.py +137 -71
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/hooks/orchestrator_reflector.py +23 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/hooks/pretooluse.py +29 -6
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/hooks/session_handler.py +28 -0
- htmlgraph-0.26.6/src/python/htmlgraph/hooks/session_summary.py +391 -0
- htmlgraph-0.26.6/src/python/htmlgraph/hooks/subagent_detection.py +202 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/hooks/validator.py +192 -79
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/operations/__init__.py +18 -0
- htmlgraph-0.26.6/src/python/htmlgraph/operations/initialization.py +596 -0
- htmlgraph-0.26.6/src/python/htmlgraph/operations/initialization.py.backup +228 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/orchestration/__init__.py +16 -1
- htmlgraph-0.26.6/src/python/htmlgraph/orchestration/claude_launcher.py +185 -0
- htmlgraph-0.26.6/src/python/htmlgraph/orchestration/command_builder.py +71 -0
- htmlgraph-0.26.6/src/python/htmlgraph/orchestration/headless_spawner.py +277 -0
- htmlgraph-0.26.6/src/python/htmlgraph/orchestration/plugin_manager.py +136 -0
- htmlgraph-0.26.6/src/python/htmlgraph/orchestration/prompts.py +137 -0
- htmlgraph-0.26.6/src/python/htmlgraph/orchestration/spawners/__init__.py +16 -0
- htmlgraph-0.26.6/src/python/htmlgraph/orchestration/spawners/base.py +194 -0
- htmlgraph-0.26.6/src/python/htmlgraph/orchestration/spawners/claude.py +170 -0
- htmlgraph-0.26.6/src/python/htmlgraph/orchestration/spawners/codex.py +442 -0
- htmlgraph-0.26.6/src/python/htmlgraph/orchestration/spawners/copilot.py +299 -0
- htmlgraph-0.26.6/src/python/htmlgraph/orchestration/spawners/gemini.py +478 -0
- htmlgraph-0.26.6/src/python/htmlgraph/orchestration/subprocess_runner.py +33 -0
- htmlgraph-0.26.6/src/python/htmlgraph/orchestration.md +563 -0
- htmlgraph-0.26.6/src/python/htmlgraph/orchestrator-system-prompt-optimized.txt +863 -0
- htmlgraph-0.26.6/src/python/htmlgraph/orchestrator_config.py +357 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/orchestrator_mode.py +45 -12
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/transcript.py +16 -4
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/hooks/test_event_tracker.py +249 -0
- htmlgraph-0.26.6/tests/hooks/test_git_commands.py +306 -0
- htmlgraph-0.26.6/tests/integration/test_codex_spawner.py +348 -0
- htmlgraph-0.26.6/tests/integration/test_complexity_assessment.py +418 -0
- htmlgraph-0.26.6/tests/integration/test_copilot_spawner_tracking.py +400 -0
- htmlgraph-0.26.6/tests/integration/test_delegation_events.py +133 -0
- htmlgraph-0.26.6/tests/integration/test_discoverability.py +164 -0
- htmlgraph-0.26.6/tests/integration/test_edge_index_bug.py +116 -0
- htmlgraph-0.26.6/tests/integration/test_features.py +96 -0
- htmlgraph-0.26.6/tests/integration/test_gemini_spawner_diagnosis.py +72 -0
- htmlgraph-0.26.6/tests/integration/test_new_features.py +255 -0
- htmlgraph-0.26.6/tests/integration/test_orchestration_tab.py +120 -0
- htmlgraph-0.26.6/tests/integration/test_orchestration_with_playwright.py +149 -0
- htmlgraph-0.26.6/tests/integration/test_orchestrator_pattern.py +175 -0
- htmlgraph-0.26.6/tests/integration/test_phase1_userquery.py +103 -0
- htmlgraph-0.26.6/tests/integration/test_phase4_delegation_events.py +158 -0
- htmlgraph-0.26.6/tests/integration/test_real_workitem_integration.py +324 -0
- htmlgraph-0.26.6/tests/integration/test_redesigned_dashboard.py +47 -0
- htmlgraph-0.26.6/tests/integration/test_spawner_live_events.py +305 -0
- htmlgraph-0.26.6/tests/integration/test_spawner_routing_live.py +353 -0
- htmlgraph-0.26.6/tests/integration/test_task_delegation.py +100 -0
- htmlgraph-0.26.6/tests/integration/test_user_query_events.py +399 -0
- htmlgraph-0.26.6/tests/integration/test_websocket_realtime.py +262 -0
- htmlgraph-0.26.6/tests/integration/test_websocket_streaming.py +246 -0
- htmlgraph-0.26.6/tests/manual/test-hook-input.py +33 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_cli_commands.py +4 -2
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_cli_rich_output.py +44 -31
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_orchestrator_enforce_hook.py +13 -7
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_parent_child_linking.py +23 -3
- htmlgraph-0.26.6/tests/python/test_pretooluse_event_hierarchy.py +494 -0
- htmlgraph-0.26.6/tests/test_orchestrator_config.py +354 -0
- htmlgraph-0.26.5/src/python/htmlgraph/cli.py +0 -7256
- htmlgraph-0.26.5/src/python/htmlgraph/dashboard.html +0 -812
- htmlgraph-0.26.5/src/python/htmlgraph/orchestration/headless_spawner.py +0 -1537
- htmlgraph-0.26.5/src/python/htmlgraph/orchestrator-system-prompt-optimized.txt +0 -298
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/README.md +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/agent-coordination/README.md +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/agent-coordination/demo.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/create_auth_track_demo.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/create_htmlgraph_dev_track.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/documentation-site/README.md +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/documentation-site/agents.json +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/documentation-site/demo.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/documentation-site/features/doc-api-graph.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/documentation-site/features/doc-api-overview.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/documentation-site/features/doc-api-sdk.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/documentation-site/features/doc-example-advanced.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/documentation-site/features/doc-example-basic.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/documentation-site/features/doc-index.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/documentation-site/features/doc-installation.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/documentation-site/features/doc-quickstart.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/handoff-demo.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/knowledge-base/README.md +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/knowledge-base/agents.json +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/knowledge-base/demo.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/knowledge-base/features/feat-276c615f.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/knowledge-base/features/feat-7a6f797d.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/knowledge-base/features/note-ai-agents.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/knowledge-base/features/note-graph-db.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/knowledge-base/features/note-htmlgraph.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/knowledge-base/features/note-web-standards.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/parallel_task_coordination.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/routing-demo.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/sdk_demo.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/todo-list/README.md +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/todo-list/demo.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/todo-list/index.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/todo-list/styles.css +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/todo-list/task-001.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/todo-list/task-002.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/todo-list/task-003.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/todo-list/task-004.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/todo-list/task-005.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/examples/todo-list/task-006.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/packages/gemini-extension/GEMINI.md +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/packages/gemini-extension/README.md +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/packages/gemini-extension/command_deploy.md +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/packages/gemini-extension/command_end.md +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/packages/gemini-extension/command_feature-add.md +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/packages/gemini-extension/command_feature-complete.md +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/packages/gemini-extension/command_feature-primary.md +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/packages/gemini-extension/command_feature-start.md +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/packages/gemini-extension/command_git-commit.md +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/packages/gemini-extension/command_help.md +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/packages/gemini-extension/command_init.md +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/packages/gemini-extension/command_plan.md +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/packages/gemini-extension/command_recommend.md +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/packages/gemini-extension/command_serve.md +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/packages/gemini-extension/command_spike.md +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/packages/gemini-extension/command_start.md +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/packages/gemini-extension/command_status.md +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/packages/gemini-extension/command_track.md +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/packages/gemini-extension/hooks/hooks.json +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/packages/gemini-extension/hooks/scripts/post-tool.sh +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/packages/gemini-extension/hooks/scripts/session-end.sh +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/packages/gemini-extension/hooks/scripts/session-start.sh +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/js/htmlgraph.js +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/.htmlgraph/agents.json +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/.htmlgraph/htmlgraph.db +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/agent_detection.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/agent_registry.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/agents.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/analytics/__init__.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/analytics/cli.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/analytics/cross_session.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/analytics/dependency.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/analytics/work_type.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/analytics_index.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/api/__init__.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/api/static/htmx.min.js +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/api/static/style-redesign.css +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/api/static/style.css +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/api/templates/dashboard.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/api/templates/partials/activity-feed-hierarchical.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/api/templates/partials/agents-redesign.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/api/templates/partials/agents.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/api/templates/partials/event-traces.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/api/templates/partials/features-kanban-redesign.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/api/templates/partials/metrics-redesign.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/api/templates/partials/metrics.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/api/templates/partials/orchestration-redesign.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/api/templates/partials/spawners.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/archive/__init__.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/archive/bloom.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/archive/fts.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/archive/manager.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/archive/search.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/atomic_ops.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/attribute_index.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/builders/__init__.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/builders/base.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/builders/bug.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/builders/chore.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/builders/epic.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/builders/feature.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/builders/insight.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/builders/metric.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/builders/pattern.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/builders/phase.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/builders/spike.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/builders/track.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/cigs/__init__.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/cigs/autonomy.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/cigs/cost.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/cigs/messages_basic.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/cigs/messaging.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/cigs/models.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/cigs/pattern_storage.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/cigs/patterns.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/cigs/posttool_analyzer.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/cigs/reporter.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/cigs/tracker.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/cli_commands/__init__.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/cli_commands/feature.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/cli_framework.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/collections/__init__.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/collections/base.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/collections/bug.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/collections/chore.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/collections/epic.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/collections/feature.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/collections/insight.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/collections/metric.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/collections/pattern.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/collections/phase.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/collections/session.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/collections/spike.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/collections/task_delegation.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/collections/todo.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/collections/traces.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/config.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/context_analytics.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/converter.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/cost_analysis/__init__.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/cost_analysis/analyzer.py +0 -0
- /htmlgraph-0.26.5/src/python/htmlgraph/dashboard.html.backup → /htmlgraph-0.26.6/src/python/htmlgraph/dashboard.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/dashboard.html.bak +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/dashboard.html.bak2 +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/dashboard.html.bak3 +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/db/__init__.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/db/queries.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/dependency_models.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/deploy.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/deployment_models.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/docs/API_REFERENCE.md +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/docs/HTTP_API.md +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/docs/INTEGRATION_GUIDE.md +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/docs/__init__.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/docs/docs_version.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/docs/metadata.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/docs/migrations.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/docs/template_engine.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/docs/templates/_sections/cli_reference.md.j2 +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/docs/templates/_sections/core_concepts.md.j2 +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/docs/templates/_sections/sdk_basics.md.j2 +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/docs/templates/base_agents.md.j2 +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/docs/templates/example_user_override.md.j2 +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/docs/version_check.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/edge_index.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/error_handler.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/event_log.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/event_migration.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/exceptions.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/extensions/gemini/GEMINI.md +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/extensions/gemini/README.md +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/extensions/gemini/gemini-extension.json +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/extensions/gemini/hooks/hooks.json +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/extensions/gemini/hooks/scripts/post-tool.sh +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/extensions/gemini/hooks/scripts/session-end.sh +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/extensions/gemini/hooks/scripts/session-start.sh +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/file_watcher.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/find_api.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/git_events.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/graph.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/hooks/.htmlgraph/.session-warning-state.json +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/hooks/.htmlgraph/agents.json +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/hooks/.htmlgraph/index.sqlite +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/hooks/__init__.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/hooks/bootstrap.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/hooks/cigs_pretool_enforcer.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/hooks/concurrent_sessions.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/hooks/context.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/hooks/drift_handler.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/hooks/hooks-config.example.json +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/hooks/installer.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/hooks/post-checkout.sh +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/hooks/post-commit.sh +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/hooks/post-merge.sh +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/hooks/post_tool_use_failure.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/hooks/post_tool_use_handler.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/hooks/posttooluse.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/hooks/pre-commit.sh +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/hooks/pre-push.sh +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/hooks/prompt_analyzer.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/hooks/state_manager.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/hooks/subagent_stop.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/hooks/task_enforcer.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/hooks/task_validator.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/ids.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/index.d.ts +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/learning.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/mcp_server.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/models.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/operations/README.md +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/operations/analytics.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/operations/events.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/operations/fastapi_server.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/operations/hooks.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/operations/server.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/orchestration/live_events.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/orchestration/model_selection.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/orchestration/task_coordination.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/orchestrator.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/orchestrator_validator.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/parallel.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/parser.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/planning.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/pydantic_models.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/quality_gates.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/query_builder.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/reflection.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/repo_hash.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/routing.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/scripts/__init__.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/scripts/deploy.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/sdk.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/server.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/services/__init__.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/services/claiming.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/session_hooks.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/session_manager.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/session_registry.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/session_state.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/session_warning.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/setup.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/spike_index.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/styles.css +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/sync_docs.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/system_prompts.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/templates/AGENTS.md.template +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/templates/CLAUDE.md.template +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/templates/GEMINI.md.template +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/templates/orchestration-view.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/track_builder.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/track_manager.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/transcript_analytics.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/types.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/validation.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/watch.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/src/python/htmlgraph/work_type_utils.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/benchmarks/README.md +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/benchmarks/__init__.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/benchmarks/bench_graph.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/benchmarks/conftest.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/hooks/__init__.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/hooks/test_bootstrap.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/hooks/test_concurrent_sessions.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/hooks/test_context.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/hooks/test_hybrid_event_capture.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/hooks/test_prompt_analyzer.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/hooks/test_session_handler.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/hooks/test_state_manager.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/hooks/test_system_prompt_persistence.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/hooks/test_system_prompt_persistence_integration.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/integration/multi_agent/README.md +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/integration/multi_agent/__init__.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/integration/multi_agent/test_agent_quirks.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/integration/multi_agent/test_git_continuity_spine.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/integration/test_cigs_hook_flow.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/integration/test_cigs_integration.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/integration/test_cigs_learning.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/integration/test_dashboard_spawner_display.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/integration/test_deployment_workflow.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/integration/test_handoff_routing.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/integration/test_multi_agent_coordination.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/integration/test_orchestrator_spawner_delegation.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/integration/test_post_compact_delegation.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/integration/test_spawner_integration.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/integration/test_spawner_observability_e2e.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/integration/test_spawner_tool_tracking.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/js/README.md +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/js/test_htmlgraph.html +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/operations/__init__.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/operations/test_hooks.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/operations/test_server.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/__init__.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/conftest.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_activity_feed_ui.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_agent_attribution.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_agent_detection.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_analytics.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_archive_manager.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_archive_search.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_atomic_ops.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_auto_spike.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_cigs_pretool_enforcer.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_claiming.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_cli_pydantic_models.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_collection_filter.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_cost_analyzer.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_cross_agent_attribution.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_cross_session_analytics.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_dashboard_attribution.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_dashboard_ui.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_delegation_fk_fix.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_delete.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_deploy.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_drift_parent_activity.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_drift_queue_cleanup.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_edge_index.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_error_handling.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_event_index.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_event_query.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_event_tracing.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_feature_track_linkage_phase1.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_find_api.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_git_events.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_graph_traversal.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_handoff.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_headless_spawner.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_headless_spawner_parent_session.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_ids.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_install_hooks.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_lifecycle.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_mcp_server.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_mcp_stdio_transport.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_models.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_orchestration.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_orchestrator_circuit_breaker.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_orchestrator_cli.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_orchestrator_mode.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_parent_child_event_linking.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_parent_linking_integration.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_pattern_storage.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_plugin_update_preservation.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_post_tool_use_failure.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_post_tool_use_handler.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_posttooluse_cigs.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_pre_commit_hooks.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_pre_work_validation_integration.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_quality_gates.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_query_builder.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_query_cache.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_query_compilation.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_reflection.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_repo_hash.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_routing.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_sdk_discoverability.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_sdk_get_active_work_item.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_sdk_parent_session.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_sdk_sqlite_integration.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_session_cleanup.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_session_continuity.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_session_integration.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_session_registry.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_session_start_cigs.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_session_start_info_validation.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_session_state_manager.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_spawner_agents.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_spawner_routing.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_sqlite_schema.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_stop_cigs.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_system_overhead_drift.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_template_system.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_todo_collection.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_traces_collection.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_track_loading.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_transcript_linking.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_update_preserves_incoming_edges.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_user_prompt_submit_cigs.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_validate_work_hook.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_version_migration.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_violation_tracker.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_work_queue.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/python/test_work_type.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/test_agent_routing.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/test_autonomy_recommender.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/test_cigs_cli.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/test_cigs_cost_calculator.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/test_cigs_cost_reporter.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/test_cigs_imperative_messages.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/test_cigs_messages_basic.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/test_cli_output_snapshots.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/test_cli_sdk_parity.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/test_deployment_models.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/test_event_log.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/test_hybrid_event_capture.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/test_orchestrator_validator.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/test_pattern_detector.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/test_sdk_api_surface.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/test_sdk_operations.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/test_transaction_snapshot.py +0 -0
- {htmlgraph-0.26.5 → htmlgraph-0.26.6}/tests/test_transcript.py +0 -0
|
@@ -53,6 +53,14 @@ Thumbs.db
|
|
|
53
53
|
.htmlgraph/sessions/*.jsonl
|
|
54
54
|
.htmlgraph/events/*.jsonl
|
|
55
55
|
.htmlgraph/parent-activity.json
|
|
56
|
+
.htmlgraph/logs/errors/
|
|
57
|
+
|
|
58
|
+
# HtmlGraph backup and test files
|
|
59
|
+
.htmlgraph/index.sqlite.backup
|
|
60
|
+
.htmlgraph/*.backup
|
|
61
|
+
.htmlgraph/test_*.db
|
|
62
|
+
.htmlgraph/database.db
|
|
63
|
+
.htmlgraph/.htmlgraph/ # Prevent nested structure corruption
|
|
56
64
|
|
|
57
65
|
# Keep these (source of truth):
|
|
58
66
|
# - .htmlgraph/features/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: htmlgraph
|
|
3
|
-
Version: 0.26.
|
|
3
|
+
Version: 0.26.6
|
|
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
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Demo: AI Agent Strategic Planning with HtmlGraph
|
|
4
|
+
|
|
5
|
+
Shows how AI agents can use the strategic planning features to:
|
|
6
|
+
- Find bottlenecks blocking the most work
|
|
7
|
+
- Identify parallel work opportunities
|
|
8
|
+
- Get smart recommendations on what to work on next
|
|
9
|
+
- Assess project risks
|
|
10
|
+
- Analyze impact of completing tasks
|
|
11
|
+
|
|
12
|
+
This is the AGENT-FRIENDLY interface - simple dicts, no complex objects.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from htmlgraph import SDK
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def main():
|
|
19
|
+
print("\n" + "🤖 " * 35)
|
|
20
|
+
print("AI AGENT STRATEGIC PLANNING DEMO")
|
|
21
|
+
print("🤖 " * 35)
|
|
22
|
+
|
|
23
|
+
# Initialize SDK with agent ID
|
|
24
|
+
sdk = SDK(agent="claude")
|
|
25
|
+
|
|
26
|
+
# =========================================================================
|
|
27
|
+
# 1. FIND BOTTLENECKS
|
|
28
|
+
# =========================================================================
|
|
29
|
+
print("\n1. 🚧 Finding Bottlenecks (what's blocking the most work?)")
|
|
30
|
+
print("=" * 70)
|
|
31
|
+
|
|
32
|
+
bottlenecks = sdk.find_bottlenecks(top_n=3)
|
|
33
|
+
|
|
34
|
+
if bottlenecks:
|
|
35
|
+
print(f"\nFound {len(bottlenecks)} bottlenecks:")
|
|
36
|
+
for i, bn in enumerate(bottlenecks, 1):
|
|
37
|
+
print(f"\n{i}. {bn['title']}")
|
|
38
|
+
print(f" Status: {bn['status']} | Priority: {bn['priority']}")
|
|
39
|
+
print(f" Blocking: {bn['blocks_count']} tasks")
|
|
40
|
+
print(f" Impact score: {bn['impact_score']:.1f}")
|
|
41
|
+
if bn["blocked_tasks"]:
|
|
42
|
+
print(f" Blocks: {', '.join(bn['blocked_tasks'][:3])}")
|
|
43
|
+
else:
|
|
44
|
+
print(" ✓ No bottlenecks found!")
|
|
45
|
+
|
|
46
|
+
# =========================================================================
|
|
47
|
+
# 2. GET PARALLEL WORK OPPORTUNITIES
|
|
48
|
+
# =========================================================================
|
|
49
|
+
print("\n2. ⚡ Finding Parallel Work (what can multiple agents do simultaneously?)")
|
|
50
|
+
print("=" * 70)
|
|
51
|
+
|
|
52
|
+
parallel = sdk.get_parallel_work(max_agents=5)
|
|
53
|
+
|
|
54
|
+
print(
|
|
55
|
+
f"\nMax parallelism: {parallel['max_parallelism']} tasks can be worked on at once"
|
|
56
|
+
)
|
|
57
|
+
print(f"Total ready now: {parallel['total_ready']} tasks")
|
|
58
|
+
print(f"Dependency levels: {parallel['level_count']}")
|
|
59
|
+
|
|
60
|
+
if parallel["ready_now"]:
|
|
61
|
+
print(f"\nReady to start immediately ({len(parallel['ready_now'])} tasks):")
|
|
62
|
+
for task_id in parallel["ready_now"]:
|
|
63
|
+
feature = sdk.features.get(task_id)
|
|
64
|
+
if feature:
|
|
65
|
+
print(f" - {feature.title} ({feature.priority} priority)")
|
|
66
|
+
|
|
67
|
+
# =========================================================================
|
|
68
|
+
# 3. GET SMART RECOMMENDATIONS
|
|
69
|
+
# =========================================================================
|
|
70
|
+
print("\n3. 💡 Smart Recommendations (what should I prioritize?)")
|
|
71
|
+
print("=" * 70)
|
|
72
|
+
|
|
73
|
+
recs = sdk.recommend_next_work(agent_count=3)
|
|
74
|
+
|
|
75
|
+
if recs:
|
|
76
|
+
print(f"\nTop {len(recs)} recommended tasks:")
|
|
77
|
+
for i, rec in enumerate(recs, 1):
|
|
78
|
+
print(f"\n{i}. {rec['title']}")
|
|
79
|
+
print(f" Priority: {rec['priority']} | Score: {rec['score']:.2f}")
|
|
80
|
+
if rec["estimated_hours"] > 0:
|
|
81
|
+
print(f" Estimated: {rec['estimated_hours']:.1f} hours")
|
|
82
|
+
print(f" Unlocks: {rec['unlocks_count']} tasks")
|
|
83
|
+
print(" Reasons:")
|
|
84
|
+
for reason in rec["reasons"][:3]:
|
|
85
|
+
print(f" - {reason}")
|
|
86
|
+
else:
|
|
87
|
+
print(" ✓ No pending tasks to recommend!")
|
|
88
|
+
|
|
89
|
+
# =========================================================================
|
|
90
|
+
# 4. ASSESS RISKS
|
|
91
|
+
# =========================================================================
|
|
92
|
+
print("\n4. ⚠️ Risk Assessment (are there dependency issues?)")
|
|
93
|
+
print("=" * 70)
|
|
94
|
+
|
|
95
|
+
risks = sdk.assess_risks()
|
|
96
|
+
|
|
97
|
+
if risks["high_risk_count"] > 0:
|
|
98
|
+
print(f"\n⚠️ {risks['high_risk_count']} high-risk tasks found:")
|
|
99
|
+
for task in risks["high_risk_tasks"][:3]:
|
|
100
|
+
print(f"\n {task['title']} (risk: {task['risk_score']:.2f})")
|
|
101
|
+
for factor in task["risk_factors"]:
|
|
102
|
+
print(f" - {factor}")
|
|
103
|
+
else:
|
|
104
|
+
print(" ✓ No high-risk tasks!")
|
|
105
|
+
|
|
106
|
+
if risks["circular_dependencies"]:
|
|
107
|
+
print(f"\n⚠️ {len(risks['circular_dependencies'])} circular dependencies:")
|
|
108
|
+
for cycle in risks["circular_dependencies"][:3]:
|
|
109
|
+
print(f" - {' → '.join(cycle)}")
|
|
110
|
+
else:
|
|
111
|
+
print(" ✓ No circular dependencies")
|
|
112
|
+
|
|
113
|
+
if risks["orphaned_count"] > 0:
|
|
114
|
+
print(f"\n⚠️ {risks['orphaned_count']} orphaned tasks (no dependents)")
|
|
115
|
+
else:
|
|
116
|
+
print(" ✓ No orphaned tasks")
|
|
117
|
+
|
|
118
|
+
if risks["recommendations"]:
|
|
119
|
+
print("\nRecommendations:")
|
|
120
|
+
for rec in risks["recommendations"][:3]:
|
|
121
|
+
print(f" • {rec}")
|
|
122
|
+
|
|
123
|
+
# =========================================================================
|
|
124
|
+
# 5. ANALYZE IMPACT (if there's a task in progress)
|
|
125
|
+
# =========================================================================
|
|
126
|
+
print("\n5. 📊 Impact Analysis (what does completing a task unlock?)")
|
|
127
|
+
print("=" * 70)
|
|
128
|
+
|
|
129
|
+
in_progress = sdk.features.where(status="in-progress")
|
|
130
|
+
if in_progress:
|
|
131
|
+
task = in_progress[0]
|
|
132
|
+
impact = sdk.analyze_impact(task.id)
|
|
133
|
+
|
|
134
|
+
print(f"\nAnalyzing: {task.title}")
|
|
135
|
+
print(f" Direct dependents: {impact['direct_dependents']}")
|
|
136
|
+
print(f" Total downstream impact: {impact['total_impact']} tasks")
|
|
137
|
+
print(
|
|
138
|
+
f" Completion unlocks: {impact['completion_impact']:.1f}% of remaining work"
|
|
139
|
+
)
|
|
140
|
+
if impact["affected_tasks"]:
|
|
141
|
+
print(f" Unlocks: {', '.join(impact['affected_tasks'][:5])}")
|
|
142
|
+
else:
|
|
143
|
+
print(" No in-progress tasks to analyze")
|
|
144
|
+
|
|
145
|
+
# =========================================================================
|
|
146
|
+
# AGENT DECISION-MAKING EXAMPLE
|
|
147
|
+
# =========================================================================
|
|
148
|
+
print("\n" + "=" * 70)
|
|
149
|
+
print("🤖 AGENT DECISION FLOW EXAMPLE")
|
|
150
|
+
print("=" * 70)
|
|
151
|
+
|
|
152
|
+
print("\nHow an AI agent might use these features:")
|
|
153
|
+
print("\n1. Check for bottlenecks → Focus on unblocking high-impact work")
|
|
154
|
+
print("2. Get recommendations → See what's most valuable to work on")
|
|
155
|
+
print("3. Check parallel work → Coordinate with other agents if available")
|
|
156
|
+
print("4. Assess risks → Be aware of potential issues")
|
|
157
|
+
print("5. Analyze impact → Understand the value of completing tasks")
|
|
158
|
+
|
|
159
|
+
if recs:
|
|
160
|
+
top_rec = recs[0]
|
|
161
|
+
print(f"\n💡 SUGGESTED ACTION: Work on '{top_rec['title']}'")
|
|
162
|
+
print(
|
|
163
|
+
f" Why: Score {top_rec['score']:.1f} - {', '.join(top_rec['reasons'][:2])}"
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
print("\n" + "=" * 70)
|
|
167
|
+
print("✅ Strategic planning features ready for AI agents!")
|
|
168
|
+
print("=" * 70 + "\n")
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
if __name__ == "__main__":
|
|
172
|
+
main()
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Demo of dependency analytics on the real HtmlGraph project.
|
|
4
|
+
|
|
5
|
+
Shows how to use SDK.dep_analytics to analyze the actual project dependencies.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from htmlgraph import SDK
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def main():
|
|
12
|
+
print("\n" + "📊 " * 35)
|
|
13
|
+
print("HTMLGRAPH PROJECT - DEPENDENCY ANALYTICS")
|
|
14
|
+
print("📊 " * 35)
|
|
15
|
+
|
|
16
|
+
# Initialize SDK
|
|
17
|
+
sdk = SDK(agent="claude")
|
|
18
|
+
|
|
19
|
+
print("\n1. Finding Bottlenecks (features blocking the most work)...")
|
|
20
|
+
print("=" * 70)
|
|
21
|
+
|
|
22
|
+
bottlenecks = sdk.dep_analytics.find_bottlenecks(
|
|
23
|
+
status_filter=["in-progress", "todo", "blocked"], top_n=5
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
if bottlenecks:
|
|
27
|
+
for i, bn in enumerate(bottlenecks, 1):
|
|
28
|
+
print(f"\n{i}. {bn.title}")
|
|
29
|
+
print(f" Status: {bn.status} | Priority: {bn.priority}")
|
|
30
|
+
print(
|
|
31
|
+
f" Blocking: {bn.transitive_blocking} features (impact: {bn.weighted_impact:.1f})"
|
|
32
|
+
)
|
|
33
|
+
if bn.blocked_nodes:
|
|
34
|
+
print(f" Directly blocks: {', '.join(bn.blocked_nodes[:3])}")
|
|
35
|
+
else:
|
|
36
|
+
print(" ✓ No bottlenecks found!")
|
|
37
|
+
|
|
38
|
+
print("\n2. Parallelization Opportunities (what can we work on simultaneously?)")
|
|
39
|
+
print("=" * 70)
|
|
40
|
+
|
|
41
|
+
parallel = sdk.dep_analytics.find_parallelizable_work(status="todo")
|
|
42
|
+
|
|
43
|
+
print(
|
|
44
|
+
f"\nMax parallelism: {parallel.max_parallelism} features can be worked on at once"
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
if parallel.dependency_levels:
|
|
48
|
+
print(
|
|
49
|
+
f"\nCurrent level (ready to start): {len(parallel.dependency_levels[0].nodes)} features"
|
|
50
|
+
)
|
|
51
|
+
for node_id in parallel.dependency_levels[0].nodes[:5]:
|
|
52
|
+
feature = sdk.features.get(node_id)
|
|
53
|
+
if feature:
|
|
54
|
+
print(f" - {feature.title} ({feature.priority} priority)")
|
|
55
|
+
|
|
56
|
+
print("\n3. Work Recommendations (what should we prioritize?)")
|
|
57
|
+
print("=" * 70)
|
|
58
|
+
|
|
59
|
+
recs = sdk.dep_analytics.recommend_next_tasks(agent_count=3, lookahead=5)
|
|
60
|
+
|
|
61
|
+
if recs.recommendations:
|
|
62
|
+
print(f"\nTop {len(recs.recommendations)} recommended tasks:")
|
|
63
|
+
for i, rec in enumerate(recs.recommendations[:5], 1):
|
|
64
|
+
print(f"\n{i}. {rec.title}")
|
|
65
|
+
print(f" Priority: {rec.priority} | Score: {rec.score:.2f}")
|
|
66
|
+
print(f" Reasons: {', '.join(rec.reasons[:2])}")
|
|
67
|
+
if rec.unlocks:
|
|
68
|
+
print(f" Unlocks: {len(rec.unlocks)} features")
|
|
69
|
+
else:
|
|
70
|
+
print(" ✓ No pending tasks to recommend!")
|
|
71
|
+
|
|
72
|
+
print("\n4. Risk Assessment (are there dependency issues?)")
|
|
73
|
+
print("=" * 70)
|
|
74
|
+
|
|
75
|
+
risk = sdk.dep_analytics.assess_dependency_risk(spof_threshold=2)
|
|
76
|
+
|
|
77
|
+
if risk.high_risk:
|
|
78
|
+
print(f"\n⚠️ High-risk nodes: {len(risk.high_risk)}")
|
|
79
|
+
for node in risk.high_risk[:3]:
|
|
80
|
+
print(f"\n {node.title} (risk: {node.risk_score:.2f})")
|
|
81
|
+
for factor in node.risk_factors:
|
|
82
|
+
print(f" - [{factor.severity}] {factor.description}")
|
|
83
|
+
else:
|
|
84
|
+
print(" ✓ No high-risk dependencies!")
|
|
85
|
+
|
|
86
|
+
if risk.circular_dependencies:
|
|
87
|
+
print(f"\n⚠️ Circular dependencies: {len(risk.circular_dependencies)}")
|
|
88
|
+
for cycle in risk.circular_dependencies[:3]:
|
|
89
|
+
print(f" - {' -> '.join(cycle)}")
|
|
90
|
+
else:
|
|
91
|
+
print(" ✓ No circular dependencies")
|
|
92
|
+
|
|
93
|
+
if risk.orphaned_nodes:
|
|
94
|
+
print(f"\n⚠️ Orphaned nodes (no dependents): {len(risk.orphaned_nodes)}")
|
|
95
|
+
else:
|
|
96
|
+
print(" ✓ No orphaned nodes")
|
|
97
|
+
|
|
98
|
+
if risk.recommendations:
|
|
99
|
+
print("\nRecommendations:")
|
|
100
|
+
for rec in risk.recommendations[:3]:
|
|
101
|
+
print(f" • {rec}")
|
|
102
|
+
|
|
103
|
+
print("\n5. Impact Analysis (what does completing a feature unlock?)")
|
|
104
|
+
print("=" * 70)
|
|
105
|
+
|
|
106
|
+
# Find a feature to analyze
|
|
107
|
+
in_progress = sdk.features.where(status="in-progress")
|
|
108
|
+
if in_progress:
|
|
109
|
+
feature = in_progress[0]
|
|
110
|
+
impact = sdk.dep_analytics.impact_analysis(feature.id)
|
|
111
|
+
|
|
112
|
+
print(f"\nAnalyzing: {feature.title}")
|
|
113
|
+
print(f" Direct dependents: {impact.direct_dependents}")
|
|
114
|
+
print(f" Transitive impact: {impact.transitive_dependents} features")
|
|
115
|
+
print(
|
|
116
|
+
f" Completion unlocks: {impact.completion_impact:.1f}% of remaining work"
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
if impact.affected_nodes:
|
|
120
|
+
print(f" Affects: {', '.join(impact.affected_nodes[:5])}")
|
|
121
|
+
else:
|
|
122
|
+
print(" No in-progress features to analyze")
|
|
123
|
+
|
|
124
|
+
print("\n" + "=" * 70)
|
|
125
|
+
print("✅ Dependency analytics complete!")
|
|
126
|
+
print("=" * 70 + "\n")
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
if __name__ == "__main__":
|
|
130
|
+
main()
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
SDK Operations Demo - Create features, tracks, and spikes for dashboard monitoring
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import time
|
|
7
|
+
from datetime import datetime
|
|
8
|
+
|
|
9
|
+
from htmlgraph import SDK
|
|
10
|
+
|
|
11
|
+
# Initialize SDK
|
|
12
|
+
sdk = SDK(agent="demo-agent")
|
|
13
|
+
|
|
14
|
+
# Track events with timestamps
|
|
15
|
+
events = []
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def log_event(event_type: str, details: str):
|
|
19
|
+
"""Log event with timestamp"""
|
|
20
|
+
timestamp = datetime.now().isoformat()
|
|
21
|
+
event_entry = {"timestamp": timestamp, "type": event_type, "details": details}
|
|
22
|
+
events.append(event_entry)
|
|
23
|
+
print(f"[{timestamp}] {event_type}: {details}")
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
# ============================================================================
|
|
27
|
+
# STEP 1: Create a track
|
|
28
|
+
# ============================================================================
|
|
29
|
+
print("\n" + "=" * 80)
|
|
30
|
+
print("STEP 1: Creating Track 'Agent Orchestration Demo'")
|
|
31
|
+
print("=" * 80)
|
|
32
|
+
|
|
33
|
+
track = sdk.tracks.create("Agent Orchestration Demo").priority("high").save()
|
|
34
|
+
|
|
35
|
+
log_event("TRACK_CREATED", f"Track created: {track.id} - 'Agent Orchestration Demo'")
|
|
36
|
+
time.sleep(2) # Wait for event to propagate
|
|
37
|
+
|
|
38
|
+
# ============================================================================
|
|
39
|
+
# STEP 2: Create 5 features linked to the track
|
|
40
|
+
# ============================================================================
|
|
41
|
+
print("\n" + "=" * 80)
|
|
42
|
+
print("STEP 2: Creating 5 Features linked to track")
|
|
43
|
+
print("=" * 80)
|
|
44
|
+
|
|
45
|
+
features = []
|
|
46
|
+
for i in range(1, 6):
|
|
47
|
+
feature = sdk.features.create(f"Demo Feature {i}")
|
|
48
|
+
feature.set_track(track.id)
|
|
49
|
+
feature.add_steps(
|
|
50
|
+
[
|
|
51
|
+
"Step 1: Setup component",
|
|
52
|
+
"Step 2: Implement functionality",
|
|
53
|
+
"Step 3: Run tests",
|
|
54
|
+
]
|
|
55
|
+
)
|
|
56
|
+
feature.save()
|
|
57
|
+
|
|
58
|
+
features.append(feature)
|
|
59
|
+
log_event("FEATURE_CREATED", f"Feature {i} created: {feature.id}")
|
|
60
|
+
|
|
61
|
+
# Space out feature creation events
|
|
62
|
+
time.sleep(2)
|
|
63
|
+
|
|
64
|
+
# ============================================================================
|
|
65
|
+
# STEP 3: Update feature statuses to simulate progress
|
|
66
|
+
# ============================================================================
|
|
67
|
+
print("\n" + "=" * 80)
|
|
68
|
+
print("STEP 3: Updating Feature Statuses")
|
|
69
|
+
print("=" * 80)
|
|
70
|
+
|
|
71
|
+
# Update Feature 1 status to done
|
|
72
|
+
features[0].status = "done"
|
|
73
|
+
sdk.features._ensure_graph().update(features[0])
|
|
74
|
+
log_event("FEATURE_STATUS_CHANGED", f"Feature 1 ({features[0].id}) marked as DONE")
|
|
75
|
+
time.sleep(2)
|
|
76
|
+
|
|
77
|
+
# Update Feature 2 status to in-progress
|
|
78
|
+
features[1].status = "in-progress"
|
|
79
|
+
sdk.features._ensure_graph().update(features[1])
|
|
80
|
+
log_event(
|
|
81
|
+
"FEATURE_STATUS_CHANGED", f"Feature 2 ({features[1].id}) marked as IN_PROGRESS"
|
|
82
|
+
)
|
|
83
|
+
time.sleep(2)
|
|
84
|
+
|
|
85
|
+
# Update Feature 3 status to in-progress
|
|
86
|
+
features[2].status = "in-progress"
|
|
87
|
+
sdk.features._ensure_graph().update(features[2])
|
|
88
|
+
log_event(
|
|
89
|
+
"FEATURE_STATUS_CHANGED", f"Feature 3 ({features[2].id}) marked as IN_PROGRESS"
|
|
90
|
+
)
|
|
91
|
+
time.sleep(2)
|
|
92
|
+
|
|
93
|
+
# Update Feature 4 status to done
|
|
94
|
+
features[3].status = "done"
|
|
95
|
+
sdk.features._ensure_graph().update(features[3])
|
|
96
|
+
log_event("FEATURE_STATUS_CHANGED", f"Feature 4 ({features[3].id}) marked as DONE")
|
|
97
|
+
time.sleep(2)
|
|
98
|
+
|
|
99
|
+
# Feature 5 stays pending (todo status)
|
|
100
|
+
log_event("FEATURE_STATUS_UNCHANGED", f"Feature 5 ({features[4].id}) remaining PENDING")
|
|
101
|
+
time.sleep(2)
|
|
102
|
+
|
|
103
|
+
# ============================================================================
|
|
104
|
+
# STEP 4: Create spikes for investigation
|
|
105
|
+
# ============================================================================
|
|
106
|
+
print("\n" + "=" * 80)
|
|
107
|
+
print("STEP 4: Creating Spikes")
|
|
108
|
+
print("=" * 80)
|
|
109
|
+
|
|
110
|
+
spike1 = sdk.spikes.create("Investigate Performance")
|
|
111
|
+
spike1.set_findings(
|
|
112
|
+
"Performance is excellent with WebSocket updates - achieved 50ms latency"
|
|
113
|
+
)
|
|
114
|
+
spike1.save()
|
|
115
|
+
log_event("SPIKE_CREATED", f"Spike 1 created: {spike1.id} - 'Investigate Performance'")
|
|
116
|
+
time.sleep(2)
|
|
117
|
+
|
|
118
|
+
spike2 = sdk.spikes.create("Research Dashboard Integration")
|
|
119
|
+
spike2.set_findings(
|
|
120
|
+
"Dashboard integration pattern verified - real-time event streaming works"
|
|
121
|
+
)
|
|
122
|
+
spike2.save()
|
|
123
|
+
log_event(
|
|
124
|
+
"SPIKE_CREATED", f"Spike 2 created: {spike2.id} - 'Research Dashboard Integration'"
|
|
125
|
+
)
|
|
126
|
+
time.sleep(2)
|
|
127
|
+
|
|
128
|
+
spike3 = sdk.spikes.create("Evaluate Scalability")
|
|
129
|
+
spike3.set_findings("System handles 1000+ concurrent connections with graph operations")
|
|
130
|
+
spike3.save()
|
|
131
|
+
log_event("SPIKE_CREATED", f"Spike 3 created: {spike3.id} - 'Evaluate Scalability'")
|
|
132
|
+
time.sleep(2)
|
|
133
|
+
|
|
134
|
+
# ============================================================================
|
|
135
|
+
# SUMMARY
|
|
136
|
+
# ============================================================================
|
|
137
|
+
print("\n" + "=" * 80)
|
|
138
|
+
print("SDK OPERATIONS COMPLETED")
|
|
139
|
+
print("=" * 80)
|
|
140
|
+
|
|
141
|
+
print(f"\nTotal Events Generated: {len(events)}")
|
|
142
|
+
print("\nEvent Timeline:")
|
|
143
|
+
print("-" * 80)
|
|
144
|
+
|
|
145
|
+
for i, event in enumerate(events, 1):
|
|
146
|
+
print(f"{i:2d}. [{event['timestamp']}] {event['type']:30s} - {event['details']}")
|
|
147
|
+
|
|
148
|
+
print("\n" + "-" * 80)
|
|
149
|
+
print("Expected Dashboard Activity Feed Updates:")
|
|
150
|
+
print(" - All events should appear on the dashboard within 1-2 seconds")
|
|
151
|
+
print(" - Events are ordered by creation timestamp")
|
|
152
|
+
print(" - Feature/Track/Spike relationships are automatically tracked")
|
|
153
|
+
print("=" * 80)
|
|
154
|
+
|
|
155
|
+
# Additional summary statistics
|
|
156
|
+
print("\nSummary Statistics:")
|
|
157
|
+
print(f" Track created: 1 (ID: {track.id})")
|
|
158
|
+
print(f" Features created: 5 (IDs: {[f.id for f in features]})")
|
|
159
|
+
print(" Features Done: 2 (Features 1, 4)")
|
|
160
|
+
print(" Features In Progress: 2 (Features 2, 3)")
|
|
161
|
+
print(" Features Pending: 1 (Feature 5)")
|
|
162
|
+
print(f" Spikes created: 3 (IDs: {[spike1.id, spike2.id, spike3.id]})")
|
|
163
|
+
print(f" Total operations: {len(events)}")
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Example demonstrating query compilation for CSS selector reuse.
|
|
4
|
+
|
|
5
|
+
This shows how to pre-compile frequently used selectors for better performance.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import tempfile
|
|
9
|
+
|
|
10
|
+
from htmlgraph import HtmlGraph
|
|
11
|
+
from htmlgraph.models import Node
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def main():
|
|
15
|
+
"""Demonstrate query compilation usage."""
|
|
16
|
+
print("🔍 Query Compilation Example\n")
|
|
17
|
+
print("=" * 60)
|
|
18
|
+
|
|
19
|
+
with tempfile.TemporaryDirectory() as tmpdir:
|
|
20
|
+
# Create graph
|
|
21
|
+
graph = HtmlGraph(tmpdir, auto_load=False)
|
|
22
|
+
|
|
23
|
+
# Add sample nodes
|
|
24
|
+
print("\n📝 Adding sample nodes...")
|
|
25
|
+
graph.add(
|
|
26
|
+
Node(id="feat-001", title="Auth System", status="blocked", priority="high")
|
|
27
|
+
)
|
|
28
|
+
graph.add(
|
|
29
|
+
Node(id="feat-002", title="Database", status="blocked", priority="critical")
|
|
30
|
+
)
|
|
31
|
+
graph.add(Node(id="feat-003", title="API", status="todo", priority="high"))
|
|
32
|
+
graph.add(Node(id="feat-004", title="UI", status="done", priority="medium"))
|
|
33
|
+
graph.add(Node(id="feat-005", title="Tests", status="blocked", priority="low"))
|
|
34
|
+
|
|
35
|
+
# Reset metrics for clean measurement
|
|
36
|
+
graph.reset_metrics()
|
|
37
|
+
|
|
38
|
+
# Example 1: Regular query
|
|
39
|
+
print("\n📊 Example 1: Regular Query")
|
|
40
|
+
print("-" * 60)
|
|
41
|
+
results1 = graph.query("[data-status='blocked']")
|
|
42
|
+
print(f"Found {len(results1)} blocked items:")
|
|
43
|
+
for node in results1:
|
|
44
|
+
print(f" - {node.id}: {node.title} ({node.priority} priority)")
|
|
45
|
+
|
|
46
|
+
# Example 2: Pre-compile for reuse
|
|
47
|
+
print("\n📊 Example 2: Pre-compiled Query")
|
|
48
|
+
print("-" * 60)
|
|
49
|
+
compiled = graph.compile_query("[data-status='blocked']")
|
|
50
|
+
print(f"Compiled query for selector: {compiled.selector}")
|
|
51
|
+
|
|
52
|
+
# Use compiled query multiple times
|
|
53
|
+
results2 = graph.query_compiled(compiled)
|
|
54
|
+
results3 = graph.query_compiled(compiled)
|
|
55
|
+
print(f"First execution: {len(results2)} results")
|
|
56
|
+
print(f"Second execution: {len(results3)} results (uses cache)")
|
|
57
|
+
|
|
58
|
+
# Example 3: Multiple compiled queries
|
|
59
|
+
print("\n📊 Example 3: Multiple Compiled Queries")
|
|
60
|
+
print("-" * 60)
|
|
61
|
+
high_priority = graph.compile_query("[data-priority='high']")
|
|
62
|
+
critical = graph.compile_query("[data-priority='critical']")
|
|
63
|
+
|
|
64
|
+
high_results = graph.query_compiled(high_priority)
|
|
65
|
+
critical_results = graph.query_compiled(critical)
|
|
66
|
+
|
|
67
|
+
print(f"High priority items: {len(high_results)}")
|
|
68
|
+
print(f"Critical priority items: {len(critical_results)}")
|
|
69
|
+
|
|
70
|
+
# Show metrics
|
|
71
|
+
print("\n📈 Performance Metrics")
|
|
72
|
+
print("-" * 60)
|
|
73
|
+
metrics = graph.metrics
|
|
74
|
+
print(f"Total queries: {metrics['query_count']}")
|
|
75
|
+
print(f"Cache hits: {metrics['cache_hits']}")
|
|
76
|
+
print(f"Cache misses: {metrics['cache_misses']}")
|
|
77
|
+
print(f"Cache hit rate: {metrics['cache_hit_rate']}")
|
|
78
|
+
print(f"\nCompiled queries created: {metrics['compiled_queries']}")
|
|
79
|
+
print(f"Compilation cache hits: {metrics['compiled_query_hits']}")
|
|
80
|
+
print(f"Compilation hit rate: {metrics['compilation_hit_rate']}")
|
|
81
|
+
print(f"Compiled queries cached: {metrics['compiled_queries_cached']}")
|
|
82
|
+
|
|
83
|
+
# Example 4: Compilation cache reuse
|
|
84
|
+
print("\n📊 Example 4: Compilation Cache Reuse")
|
|
85
|
+
print("-" * 60)
|
|
86
|
+
# Compiling the same selector again returns cached instance
|
|
87
|
+
blocked_query1 = graph.compile_query("[data-status='blocked']")
|
|
88
|
+
blocked_query2 = graph.compile_query("[data-status='blocked']")
|
|
89
|
+
|
|
90
|
+
if blocked_query1 is blocked_query2:
|
|
91
|
+
print("✅ Compilation cache works - same instance returned")
|
|
92
|
+
else:
|
|
93
|
+
print("❌ Unexpected - different instances")
|
|
94
|
+
|
|
95
|
+
print("\n" + "=" * 60)
|
|
96
|
+
print("✅ Query compilation example completed successfully!")
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
if __name__ == "__main__":
|
|
100
|
+
main()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "htmlgraph",
|
|
3
|
-
"version": "0.26.
|
|
3
|
+
"version": "0.26.6",
|
|
4
4
|
"description": "HtmlGraph session tracking and documentation for Gemini CLI. Ensures proper activity attribution, feature awareness, and continuous work tracking.",
|
|
5
5
|
"author": "Shakes",
|
|
6
6
|
"license": "MIT",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "htmlgraph"
|
|
3
|
-
version = "0.26.
|
|
3
|
+
version = "0.26.6"
|
|
4
4
|
description = "HTML is All You Need - Graph database on web standards"
|
|
5
5
|
authors = [{name = "Shakes", email = "shakestzd@gmail.com"}]
|
|
6
6
|
readme = "README.md"
|
|
@@ -52,7 +52,7 @@ deploy = [
|
|
|
52
52
|
]
|
|
53
53
|
|
|
54
54
|
[project.scripts]
|
|
55
|
-
htmlgraph = "htmlgraph.cli:main"
|
|
55
|
+
htmlgraph = "htmlgraph.cli.main:main"
|
|
56
56
|
htmlgraph-deploy = "htmlgraph.scripts.deploy:main"
|
|
57
57
|
|
|
58
58
|
[project.urls]
|