htmlgraph 0.22.0__tar.gz → 0.23.1__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.22.0 → htmlgraph-0.23.1}/PKG-INFO +3 -1
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/README.md +1 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/packages/gemini-extension/gemini-extension.json +1 -1
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/pyproject.toml +2 -1
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/__init__.py +1 -1
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/agent_detection.py +41 -2
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/analytics/cli.py +86 -20
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/cli.py +280 -87
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/collections/base.py +68 -4
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/git_events.py +61 -7
- htmlgraph-0.23.1/src/python/htmlgraph/operations/README.md +62 -0
- htmlgraph-0.23.1/src/python/htmlgraph/operations/__init__.py +61 -0
- htmlgraph-0.23.1/src/python/htmlgraph/operations/analytics.py +338 -0
- htmlgraph-0.23.1/src/python/htmlgraph/operations/events.py +243 -0
- htmlgraph-0.23.1/src/python/htmlgraph/operations/hooks.py +349 -0
- htmlgraph-0.23.1/src/python/htmlgraph/operations/server.py +302 -0
- htmlgraph-0.23.1/src/python/htmlgraph/orchestration/__init__.py +39 -0
- htmlgraph-0.23.1/src/python/htmlgraph/orchestration/headless_spawner.py +566 -0
- htmlgraph-0.23.1/src/python/htmlgraph/orchestration/model_selection.py +323 -0
- htmlgraph-0.23.1/src/python/htmlgraph/orchestrator-system-prompt-optimized.txt +92 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/parser.py +56 -1
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/sdk.py +529 -7
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/server.py +153 -60
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/integration/multi_agent/test_git_continuity_spine.py +2 -6
- htmlgraph-0.23.1/tests/operations/__init__.py +1 -0
- htmlgraph-0.23.1/tests/operations/test_hooks.py +333 -0
- htmlgraph-0.23.1/tests/operations/test_server.py +305 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_agent_detection.py +56 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_archive_search.py +0 -1
- htmlgraph-0.23.1/tests/python/test_headless_spawner.py +520 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_models.py +94 -1
- htmlgraph-0.23.1/tests/python/test_opencode_integration.py +163 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_template_system.py +3 -8
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_version_migration.py +15 -7
- htmlgraph-0.23.1/tests/test_cli_output_snapshots.py +158 -0
- htmlgraph-0.23.1/tests/test_cli_sdk_parity.py +162 -0
- htmlgraph-0.23.1/tests/test_sdk_operations.py +388 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/.gitignore +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/agent-coordination/README.md +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/agent-coordination/demo.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/create_auth_track_demo.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/create_htmlgraph_dev_track.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/documentation-site/README.md +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/documentation-site/agents.json +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/documentation-site/demo.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/documentation-site/features/doc-api-graph.html +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/documentation-site/features/doc-api-overview.html +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/documentation-site/features/doc-api-sdk.html +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/documentation-site/features/doc-example-advanced.html +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/documentation-site/features/doc-example-basic.html +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/documentation-site/features/doc-index.html +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/documentation-site/features/doc-installation.html +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/documentation-site/features/doc-quickstart.html +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/handoff-demo.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/knowledge-base/README.md +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/knowledge-base/agents.json +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/knowledge-base/demo.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/knowledge-base/features/feat-276c615f.html +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/knowledge-base/features/feat-7a6f797d.html +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/knowledge-base/features/note-ai-agents.html +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/knowledge-base/features/note-graph-db.html +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/knowledge-base/features/note-htmlgraph.html +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/knowledge-base/features/note-web-standards.html +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/parallel_task_coordination.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/routing-demo.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/sdk_demo.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/todo-list/README.md +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/todo-list/demo.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/todo-list/index.html +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/todo-list/styles.css +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/todo-list/task-001.html +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/todo-list/task-002.html +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/todo-list/task-003.html +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/todo-list/task-004.html +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/todo-list/task-005.html +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/examples/todo-list/task-006.html +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/packages/gemini-extension/GEMINI.md +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/packages/gemini-extension/README.md +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/packages/gemini-extension/command_deploy.md +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/packages/gemini-extension/command_end.md +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/packages/gemini-extension/command_feature-add.md +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/packages/gemini-extension/command_feature-complete.md +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/packages/gemini-extension/command_feature-primary.md +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/packages/gemini-extension/command_feature-start.md +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/packages/gemini-extension/command_git-commit.md +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/packages/gemini-extension/command_help.md +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/packages/gemini-extension/command_init.md +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/packages/gemini-extension/command_plan.md +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/packages/gemini-extension/command_recommend.md +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/packages/gemini-extension/command_serve.md +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/packages/gemini-extension/command_spike.md +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/packages/gemini-extension/command_start.md +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/packages/gemini-extension/command_status.md +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/packages/gemini-extension/command_track.md +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/packages/gemini-extension/hooks/hooks.json +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/packages/gemini-extension/hooks/scripts/post-tool.sh +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/packages/gemini-extension/hooks/scripts/session-end.sh +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/packages/gemini-extension/hooks/scripts/session-start.sh +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/js/htmlgraph.js +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/agent_registry.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/agents.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/analytics/__init__.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/analytics/cross_session.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/analytics/dependency.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/analytics/work_type.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/analytics_index.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/archive/__init__.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/archive/bloom.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/archive/fts.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/archive/manager.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/archive/search.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/attribute_index.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/builders/__init__.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/builders/base.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/builders/bug.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/builders/chore.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/builders/epic.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/builders/feature.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/builders/insight.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/builders/metric.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/builders/pattern.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/builders/phase.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/builders/spike.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/builders/track.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/collections/__init__.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/collections/bug.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/collections/chore.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/collections/epic.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/collections/feature.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/collections/insight.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/collections/metric.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/collections/pattern.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/collections/phase.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/collections/spike.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/collections/todo.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/context_analytics.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/converter.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/dashboard.html +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/dependency_models.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/deploy.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/deployment_models.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/docs/__init__.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/docs/docs_version.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/docs/metadata.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/docs/migrations.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/docs/template_engine.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/docs/templates/_sections/cli_reference.md.j2 +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/docs/templates/_sections/core_concepts.md.j2 +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/docs/templates/_sections/sdk_basics.md.j2 +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/docs/templates/base_agents.md.j2 +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/docs/templates/example_user_override.md.j2 +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/docs/version_check.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/edge_index.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/event_log.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/event_migration.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/exceptions.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/extensions/gemini/GEMINI.md +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/extensions/gemini/README.md +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/extensions/gemini/gemini-extension.json +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/extensions/gemini/hooks/hooks.json +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/extensions/gemini/hooks/scripts/post-tool.sh +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/extensions/gemini/hooks/scripts/session-end.sh +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/extensions/gemini/hooks/scripts/session-start.sh +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/file_watcher.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/find_api.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/graph.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/hooks/__init__.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/hooks/event_tracker.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/hooks/hooks-config.example.json +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/hooks/installer.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/hooks/orchestrator.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/hooks/orchestrator_reflector.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/hooks/post-checkout.sh +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/hooks/post-commit.sh +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/hooks/post-merge.sh +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/hooks/post_tool_use_failure.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/hooks/posttooluse.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/hooks/pre-commit.sh +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/hooks/pre-push.sh +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/hooks/pretooluse.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/hooks/task_enforcer.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/hooks/task_validator.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/hooks/validator.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/ids.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/index.d.ts +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/learning.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/mcp_server.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/models.py +0 -0
- /htmlgraph-0.22.0/src/python/htmlgraph/orchestration.py → /htmlgraph-0.23.1/src/python/htmlgraph/orchestration/task_coordination.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/orchestrator.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/orchestrator_mode.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/orchestrator_validator.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/parallel.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/planning.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/query_builder.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/routing.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/scripts/__init__.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/scripts/deploy.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/services/__init__.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/services/claiming.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/session_manager.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/session_warning.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/setup.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/spike_index.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/styles.css +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/sync_docs.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/templates/AGENTS.md.template +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/templates/CLAUDE.md.template +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/templates/GEMINI.md.template +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/track_builder.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/track_manager.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/transcript.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/transcript_analytics.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/types.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/watch.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/src/python/htmlgraph/work_type_utils.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/benchmarks/README.md +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/benchmarks/__init__.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/benchmarks/bench_graph.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/benchmarks/conftest.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/integration/multi_agent/README.md +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/integration/multi_agent/__init__.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/integration/multi_agent/test_agent_quirks.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/integration/test_deployment_workflow.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/integration/test_handoff_routing.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/integration/test_multi_agent_coordination.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/js/README.md +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/js/test_htmlgraph.html +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/__init__.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_analytics.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_archive_manager.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_auto_spike.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_claiming.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_cli_commands.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_collection_filter.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_cross_agent_attribution.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_cross_session_analytics.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_dashboard_ui.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_delete.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_deploy.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_drift_parent_activity.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_drift_queue_cleanup.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_edge_index.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_event_index.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_event_query.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_find_api.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_git_events.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_graph_traversal.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_handoff.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_ids.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_install_hooks.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_lifecycle.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_mcp_server.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_mcp_stdio_transport.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_orchestration.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_orchestrator_circuit_breaker.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_orchestrator_cli.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_orchestrator_enforce_hook.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_orchestrator_mode.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_plugin_update_preservation.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_post_tool_use_failure.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_pre_work_validation_integration.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_query_builder.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_query_cache.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_query_compilation.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_routing.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_sdk_discoverability.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_sdk_get_active_work_item.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_session_cleanup.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_session_continuity.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_session_start_info_validation.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_system_overhead_drift.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_todo_collection.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_track_loading.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_transcript_linking.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_update_preserves_incoming_edges.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_validate_work_hook.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_work_queue.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/python/test_work_type.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/test_agent_routing.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/test_deployment_models.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/test_orchestrator_validator.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/test_transaction_snapshot.py +0 -0
- {htmlgraph-0.22.0 → htmlgraph-0.23.1}/tests/test_transcript.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: htmlgraph
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.23.1
|
|
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
|
|
@@ -19,6 +19,7 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
19
19
|
Classifier: Topic :: Database
|
|
20
20
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
21
21
|
Requires-Python: >=3.10
|
|
22
|
+
Requires-Dist: jinja2>=3.1.0
|
|
22
23
|
Requires-Dist: justhtml>=0.6.0
|
|
23
24
|
Requires-Dist: pydantic>=2.0.0
|
|
24
25
|
Requires-Dist: rich>=13.0.0
|
|
@@ -199,6 +200,7 @@ HtmlGraph nodes are standard HTML files:
|
|
|
199
200
|
- **Agent Handoff** - Context-preserving task transfers between agents
|
|
200
201
|
- **Capability Routing** - Automatic task assignment based on agent skills
|
|
201
202
|
- **Deployment Automation** - One-command releases with version management
|
|
203
|
+
- **Unified Backend** - Operations layer shared by CLI and SDK for consistency
|
|
202
204
|
|
|
203
205
|
## Comparison
|
|
204
206
|
|
|
@@ -159,6 +159,7 @@ HtmlGraph nodes are standard HTML files:
|
|
|
159
159
|
- **Agent Handoff** - Context-preserving task transfers between agents
|
|
160
160
|
- **Capability Routing** - Automatic task assignment based on agent skills
|
|
161
161
|
- **Deployment Automation** - One-command releases with version management
|
|
162
|
+
- **Unified Backend** - Operations layer shared by CLI and SDK for consistency
|
|
162
163
|
|
|
163
164
|
## Comparison
|
|
164
165
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "htmlgraph",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.23.1",
|
|
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.
|
|
3
|
+
version = "0.23.1"
|
|
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"
|
|
@@ -24,6 +24,7 @@ dependencies = [
|
|
|
24
24
|
"pydantic>=2.0.0",
|
|
25
25
|
"watchdog>=3.0.0",
|
|
26
26
|
"rich>=13.0.0",
|
|
27
|
+
"jinja2>=3.1.0",
|
|
27
28
|
"typing_extensions>=4.0.0; python_version < '3.11'",
|
|
28
29
|
]
|
|
29
30
|
|
|
@@ -20,7 +20,8 @@ def detect_agent_name() -> str:
|
|
|
20
20
|
1. HTMLGRAPH_AGENT environment variable (explicit override)
|
|
21
21
|
2. Claude Code detection (CLAUDE_CODE_VERSION, parent process)
|
|
22
22
|
3. Gemini detection (GEMINI environment markers)
|
|
23
|
-
4.
|
|
23
|
+
4. OpenCode detection (OPENCODE environment markers)
|
|
24
|
+
5. Fall back to "cli"
|
|
24
25
|
"""
|
|
25
26
|
# 1. Explicit override
|
|
26
27
|
explicit = os.environ.get("HTMLGRAPH_AGENT")
|
|
@@ -35,7 +36,11 @@ def detect_agent_name() -> str:
|
|
|
35
36
|
if _is_gemini():
|
|
36
37
|
return "gemini"
|
|
37
38
|
|
|
38
|
-
# 4.
|
|
39
|
+
# 4. OpenCode detection
|
|
40
|
+
if _is_opencode():
|
|
41
|
+
return "opencode"
|
|
42
|
+
|
|
43
|
+
# 5. Default to CLI
|
|
39
44
|
return "cli"
|
|
40
45
|
|
|
41
46
|
|
|
@@ -88,6 +93,39 @@ def _is_gemini() -> bool:
|
|
|
88
93
|
return False
|
|
89
94
|
|
|
90
95
|
|
|
96
|
+
def _is_opencode() -> bool:
|
|
97
|
+
"""Check if running in OpenCode environment."""
|
|
98
|
+
# Check for OpenCode-specific environment variables
|
|
99
|
+
if os.environ.get("OPENCODE_VERSION"):
|
|
100
|
+
return True
|
|
101
|
+
|
|
102
|
+
if os.environ.get("OPENCODE_API_KEY"):
|
|
103
|
+
return True
|
|
104
|
+
|
|
105
|
+
if os.environ.get("OPENCODE_SESSION_ID"):
|
|
106
|
+
return True
|
|
107
|
+
|
|
108
|
+
# Check for opencode in command line args
|
|
109
|
+
if any("opencode" in arg.lower() for arg in sys.argv):
|
|
110
|
+
return True
|
|
111
|
+
|
|
112
|
+
# Check for OpenCode configuration
|
|
113
|
+
try:
|
|
114
|
+
# Look for OpenCode config in common locations
|
|
115
|
+
opencode_config = Path.home() / ".opencode"
|
|
116
|
+
if opencode_config.exists():
|
|
117
|
+
return True
|
|
118
|
+
|
|
119
|
+
# Check project-level OpenCode config
|
|
120
|
+
project_config = Path.cwd() / ".opencode"
|
|
121
|
+
if project_config.exists():
|
|
122
|
+
return True
|
|
123
|
+
except Exception:
|
|
124
|
+
pass
|
|
125
|
+
|
|
126
|
+
return False
|
|
127
|
+
|
|
128
|
+
|
|
91
129
|
def get_agent_display_name(agent: str) -> str:
|
|
92
130
|
"""
|
|
93
131
|
Get a human-friendly display name for an agent.
|
|
@@ -102,6 +140,7 @@ def get_agent_display_name(agent: str) -> str:
|
|
|
102
140
|
"claude": "Claude",
|
|
103
141
|
"claude-code": "Claude",
|
|
104
142
|
"gemini": "Gemini",
|
|
143
|
+
"opencode": "OpenCode",
|
|
105
144
|
"cli": "CLI",
|
|
106
145
|
"haiku": "Haiku",
|
|
107
146
|
"opus": "Opus",
|
|
@@ -5,6 +5,8 @@ This module provides the `htmlgraph analytics` command for analyzing work patter
|
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
7
|
import argparse
|
|
8
|
+
from collections.abc import Iterator
|
|
9
|
+
from contextlib import AbstractContextManager, nullcontext
|
|
8
10
|
from pathlib import Path
|
|
9
11
|
|
|
10
12
|
from rich import box
|
|
@@ -19,6 +21,7 @@ from htmlgraph.converter import html_to_session
|
|
|
19
21
|
def cmd_analytics(args: argparse.Namespace) -> int:
|
|
20
22
|
"""Display work type analytics with beautiful rich formatting."""
|
|
21
23
|
console = Console()
|
|
24
|
+
quiet = getattr(args, "quiet", False)
|
|
22
25
|
|
|
23
26
|
try:
|
|
24
27
|
sdk = SDK(agent=args.agent or "cli")
|
|
@@ -46,21 +49,67 @@ def cmd_analytics(args: argparse.Namespace) -> int:
|
|
|
46
49
|
# Determine scope
|
|
47
50
|
if args.session_id:
|
|
48
51
|
# Single session analysis
|
|
49
|
-
_display_session_analytics(
|
|
52
|
+
_display_session_analytics(
|
|
53
|
+
console, sdk, args.session_id, args.graph_dir, quiet=quiet
|
|
54
|
+
)
|
|
50
55
|
elif args.recent:
|
|
51
56
|
# Recent sessions
|
|
52
57
|
_display_recent_sessions(
|
|
53
|
-
console, sdk, session_files[: args.recent], args.graph_dir
|
|
58
|
+
console, sdk, session_files[: args.recent], args.graph_dir, quiet=quiet
|
|
54
59
|
)
|
|
55
60
|
else:
|
|
56
61
|
# Project-wide overview
|
|
57
|
-
_display_project_analytics(
|
|
62
|
+
_display_project_analytics(
|
|
63
|
+
console, sdk, session_files, args.graph_dir, quiet=quiet
|
|
64
|
+
)
|
|
58
65
|
|
|
59
66
|
return 0
|
|
60
67
|
|
|
61
68
|
|
|
69
|
+
def _status_context(
|
|
70
|
+
console: Console, quiet: bool, message: str
|
|
71
|
+
) -> AbstractContextManager[object]:
|
|
72
|
+
if quiet:
|
|
73
|
+
return nullcontext()
|
|
74
|
+
return console.status(message)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def _iter_with_progress(
|
|
78
|
+
console: Console, quiet: bool, items: list[Path], description: str
|
|
79
|
+
) -> Iterator[Path]:
|
|
80
|
+
if quiet:
|
|
81
|
+
for item in items:
|
|
82
|
+
yield item
|
|
83
|
+
return
|
|
84
|
+
try:
|
|
85
|
+
from rich.progress import (
|
|
86
|
+
BarColumn,
|
|
87
|
+
Progress,
|
|
88
|
+
SpinnerColumn,
|
|
89
|
+
TextColumn,
|
|
90
|
+
TimeElapsedColumn,
|
|
91
|
+
)
|
|
92
|
+
except Exception:
|
|
93
|
+
for item in items:
|
|
94
|
+
yield item
|
|
95
|
+
return
|
|
96
|
+
|
|
97
|
+
with Progress(
|
|
98
|
+
SpinnerColumn(),
|
|
99
|
+
TextColumn("{task.description}"),
|
|
100
|
+
BarColumn(),
|
|
101
|
+
TimeElapsedColumn(),
|
|
102
|
+
console=console,
|
|
103
|
+
transient=True,
|
|
104
|
+
) as progress:
|
|
105
|
+
task_id = progress.add_task(description, total=len(items))
|
|
106
|
+
for item in items:
|
|
107
|
+
yield item
|
|
108
|
+
progress.advance(task_id)
|
|
109
|
+
|
|
110
|
+
|
|
62
111
|
def _display_session_analytics(
|
|
63
|
-
console: Console, sdk: SDK, session_id: str, graph_dir: str
|
|
112
|
+
console: Console, sdk: SDK, session_id: str, graph_dir: str, quiet: bool
|
|
64
113
|
) -> None:
|
|
65
114
|
"""Display analytics for a single session."""
|
|
66
115
|
from htmlgraph.converter import html_to_session
|
|
@@ -72,19 +121,23 @@ def _display_session_analytics(
|
|
|
72
121
|
return
|
|
73
122
|
|
|
74
123
|
try:
|
|
75
|
-
session
|
|
124
|
+
with _status_context(console, quiet, "Loading session data..."):
|
|
125
|
+
session = html_to_session(session_path)
|
|
76
126
|
except Exception as e:
|
|
77
127
|
console.print(f"[red]Error loading session: {e}[/red]")
|
|
78
128
|
return
|
|
79
129
|
|
|
80
130
|
# Get analytics
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
131
|
+
with _status_context(console, quiet, "Computing session analytics..."):
|
|
132
|
+
dist = sdk.analytics.work_type_distribution(session_id=session_id)
|
|
133
|
+
ratio = sdk.analytics.spike_to_feature_ratio(session_id=session_id)
|
|
134
|
+
burden = sdk.analytics.maintenance_burden(session_id=session_id)
|
|
135
|
+
primary = sdk.analytics.calculate_session_primary_work_type(session_id)
|
|
136
|
+
breakdown = sdk.analytics.calculate_session_work_breakdown(session_id)
|
|
137
|
+
total_events = sum(breakdown.values()) if breakdown else session.event_count
|
|
138
|
+
transition_metrics = sdk.analytics.transition_time_metrics(
|
|
139
|
+
session_id=session_id
|
|
140
|
+
)
|
|
88
141
|
|
|
89
142
|
# Header panel
|
|
90
143
|
header = Panel(
|
|
@@ -167,7 +220,11 @@ def _display_session_analytics(
|
|
|
167
220
|
|
|
168
221
|
|
|
169
222
|
def _display_recent_sessions(
|
|
170
|
-
console: Console,
|
|
223
|
+
console: Console,
|
|
224
|
+
sdk: SDK,
|
|
225
|
+
session_files: list[Path],
|
|
226
|
+
graph_dir: str,
|
|
227
|
+
quiet: bool,
|
|
171
228
|
) -> None:
|
|
172
229
|
"""Display analytics for recent sessions."""
|
|
173
230
|
console.print(
|
|
@@ -188,7 +245,9 @@ def _display_recent_sessions(
|
|
|
188
245
|
table.add_column("Primary Type", style="yellow")
|
|
189
246
|
table.add_column("Spike Ratio", justify="right")
|
|
190
247
|
|
|
191
|
-
for session_path in
|
|
248
|
+
for session_path in _iter_with_progress(
|
|
249
|
+
console, quiet, session_files, "Processing sessions"
|
|
250
|
+
):
|
|
192
251
|
try:
|
|
193
252
|
session = html_to_session(session_path)
|
|
194
253
|
session_id = session.id
|
|
@@ -226,7 +285,11 @@ def _display_recent_sessions(
|
|
|
226
285
|
|
|
227
286
|
|
|
228
287
|
def _display_project_analytics(
|
|
229
|
-
console: Console,
|
|
288
|
+
console: Console,
|
|
289
|
+
sdk: SDK,
|
|
290
|
+
session_files: list[Path],
|
|
291
|
+
graph_dir: str,
|
|
292
|
+
quiet: bool,
|
|
230
293
|
) -> None:
|
|
231
294
|
"""Display project-wide analytics."""
|
|
232
295
|
console.print(
|
|
@@ -240,10 +303,11 @@ def _display_project_analytics(
|
|
|
240
303
|
console.print()
|
|
241
304
|
|
|
242
305
|
# Get project-wide metrics
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
306
|
+
with _status_context(console, quiet, "Computing project analytics..."):
|
|
307
|
+
all_dist = sdk.analytics.work_type_distribution()
|
|
308
|
+
all_ratio = sdk.analytics.spike_to_feature_ratio()
|
|
309
|
+
all_burden = sdk.analytics.maintenance_burden()
|
|
310
|
+
all_transition = sdk.analytics.transition_time_metrics()
|
|
247
311
|
|
|
248
312
|
# Work distribution table
|
|
249
313
|
if all_dist:
|
|
@@ -341,7 +405,9 @@ def _display_project_analytics(
|
|
|
341
405
|
console.print("[bold]Recent Sessions:[/bold]")
|
|
342
406
|
recent_files = session_files[:5]
|
|
343
407
|
|
|
344
|
-
for session_path in
|
|
408
|
+
for session_path in _iter_with_progress(
|
|
409
|
+
console, quiet, recent_files, "Loading recent sessions"
|
|
410
|
+
):
|
|
345
411
|
try:
|
|
346
412
|
session = html_to_session(session_path)
|
|
347
413
|
primary = (
|