htmlgraph 0.9.3__py3-none-any.whl → 0.27.5__py3-none-any.whl
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/.htmlgraph/.session-warning-state.json +6 -0
- htmlgraph/.htmlgraph/agents.json +72 -0
- htmlgraph/.htmlgraph/htmlgraph.db +0 -0
- htmlgraph/__init__.py +173 -17
- htmlgraph/__init__.pyi +123 -0
- htmlgraph/agent_detection.py +127 -0
- htmlgraph/agent_registry.py +45 -30
- htmlgraph/agents.py +160 -107
- htmlgraph/analytics/__init__.py +9 -2
- htmlgraph/analytics/cli.py +190 -51
- htmlgraph/analytics/cost_analyzer.py +391 -0
- htmlgraph/analytics/cost_monitor.py +664 -0
- htmlgraph/analytics/cost_reporter.py +675 -0
- htmlgraph/analytics/cross_session.py +617 -0
- htmlgraph/analytics/dependency.py +192 -100
- htmlgraph/analytics/pattern_learning.py +771 -0
- htmlgraph/analytics/session_graph.py +707 -0
- htmlgraph/analytics/strategic/__init__.py +80 -0
- htmlgraph/analytics/strategic/cost_optimizer.py +611 -0
- htmlgraph/analytics/strategic/pattern_detector.py +876 -0
- htmlgraph/analytics/strategic/preference_manager.py +709 -0
- htmlgraph/analytics/strategic/suggestion_engine.py +747 -0
- htmlgraph/analytics/work_type.py +190 -14
- htmlgraph/analytics_index.py +135 -51
- htmlgraph/api/__init__.py +3 -0
- htmlgraph/api/cost_alerts_websocket.py +416 -0
- htmlgraph/api/main.py +2498 -0
- htmlgraph/api/static/htmx.min.js +1 -0
- htmlgraph/api/static/style-redesign.css +1344 -0
- htmlgraph/api/static/style.css +1079 -0
- htmlgraph/api/templates/dashboard-redesign.html +1366 -0
- htmlgraph/api/templates/dashboard.html +794 -0
- htmlgraph/api/templates/partials/activity-feed-hierarchical.html +326 -0
- htmlgraph/api/templates/partials/activity-feed.html +1100 -0
- htmlgraph/api/templates/partials/agents-redesign.html +317 -0
- htmlgraph/api/templates/partials/agents.html +317 -0
- htmlgraph/api/templates/partials/event-traces.html +373 -0
- htmlgraph/api/templates/partials/features-kanban-redesign.html +509 -0
- htmlgraph/api/templates/partials/features.html +578 -0
- htmlgraph/api/templates/partials/metrics-redesign.html +346 -0
- htmlgraph/api/templates/partials/metrics.html +346 -0
- htmlgraph/api/templates/partials/orchestration-redesign.html +443 -0
- htmlgraph/api/templates/partials/orchestration.html +198 -0
- htmlgraph/api/templates/partials/spawners.html +375 -0
- htmlgraph/api/templates/partials/work-items.html +613 -0
- htmlgraph/api/websocket.py +538 -0
- htmlgraph/archive/__init__.py +24 -0
- htmlgraph/archive/bloom.py +234 -0
- htmlgraph/archive/fts.py +297 -0
- htmlgraph/archive/manager.py +583 -0
- htmlgraph/archive/search.py +244 -0
- htmlgraph/atomic_ops.py +560 -0
- htmlgraph/attribute_index.py +208 -0
- htmlgraph/bounded_paths.py +539 -0
- htmlgraph/builders/__init__.py +14 -0
- htmlgraph/builders/base.py +118 -29
- htmlgraph/builders/bug.py +150 -0
- htmlgraph/builders/chore.py +119 -0
- htmlgraph/builders/epic.py +150 -0
- htmlgraph/builders/feature.py +31 -6
- htmlgraph/builders/insight.py +195 -0
- htmlgraph/builders/metric.py +217 -0
- htmlgraph/builders/pattern.py +202 -0
- htmlgraph/builders/phase.py +162 -0
- htmlgraph/builders/spike.py +52 -19
- htmlgraph/builders/track.py +148 -72
- htmlgraph/cigs/__init__.py +81 -0
- htmlgraph/cigs/autonomy.py +385 -0
- htmlgraph/cigs/cost.py +475 -0
- htmlgraph/cigs/messages_basic.py +472 -0
- htmlgraph/cigs/messaging.py +365 -0
- htmlgraph/cigs/models.py +771 -0
- htmlgraph/cigs/pattern_storage.py +427 -0
- htmlgraph/cigs/patterns.py +503 -0
- htmlgraph/cigs/posttool_analyzer.py +234 -0
- htmlgraph/cigs/reporter.py +818 -0
- htmlgraph/cigs/tracker.py +317 -0
- htmlgraph/cli/.htmlgraph/.session-warning-state.json +6 -0
- htmlgraph/cli/.htmlgraph/agents.json +72 -0
- htmlgraph/cli/.htmlgraph/htmlgraph.db +0 -0
- htmlgraph/cli/__init__.py +42 -0
- htmlgraph/cli/__main__.py +6 -0
- htmlgraph/cli/analytics.py +1424 -0
- htmlgraph/cli/base.py +685 -0
- htmlgraph/cli/constants.py +206 -0
- htmlgraph/cli/core.py +954 -0
- htmlgraph/cli/main.py +147 -0
- htmlgraph/cli/models.py +475 -0
- htmlgraph/cli/templates/__init__.py +1 -0
- htmlgraph/cli/templates/cost_dashboard.py +399 -0
- htmlgraph/cli/work/__init__.py +239 -0
- htmlgraph/cli/work/browse.py +115 -0
- htmlgraph/cli/work/features.py +568 -0
- htmlgraph/cli/work/orchestration.py +676 -0
- htmlgraph/cli/work/report.py +728 -0
- htmlgraph/cli/work/sessions.py +466 -0
- htmlgraph/cli/work/snapshot.py +559 -0
- htmlgraph/cli/work/tracks.py +486 -0
- htmlgraph/cli_commands/__init__.py +1 -0
- htmlgraph/cli_commands/feature.py +195 -0
- htmlgraph/cli_framework.py +115 -0
- htmlgraph/collections/__init__.py +18 -0
- htmlgraph/collections/base.py +415 -98
- htmlgraph/collections/bug.py +53 -0
- htmlgraph/collections/chore.py +53 -0
- htmlgraph/collections/epic.py +53 -0
- htmlgraph/collections/feature.py +12 -26
- htmlgraph/collections/insight.py +100 -0
- htmlgraph/collections/metric.py +92 -0
- htmlgraph/collections/pattern.py +97 -0
- htmlgraph/collections/phase.py +53 -0
- htmlgraph/collections/session.py +194 -0
- htmlgraph/collections/spike.py +56 -16
- htmlgraph/collections/task_delegation.py +241 -0
- htmlgraph/collections/todo.py +511 -0
- htmlgraph/collections/traces.py +487 -0
- htmlgraph/config/cost_models.json +56 -0
- htmlgraph/config.py +190 -0
- htmlgraph/context_analytics.py +344 -0
- htmlgraph/converter.py +216 -28
- htmlgraph/cost_analysis/__init__.py +5 -0
- htmlgraph/cost_analysis/analyzer.py +438 -0
- htmlgraph/dashboard.html +2406 -307
- htmlgraph/dashboard.html.backup +6592 -0
- htmlgraph/dashboard.html.bak +7181 -0
- htmlgraph/dashboard.html.bak2 +7231 -0
- htmlgraph/dashboard.html.bak3 +7232 -0
- htmlgraph/db/__init__.py +38 -0
- htmlgraph/db/queries.py +790 -0
- htmlgraph/db/schema.py +1788 -0
- htmlgraph/decorators.py +317 -0
- htmlgraph/dependency_models.py +19 -2
- htmlgraph/deploy.py +142 -125
- htmlgraph/deployment_models.py +474 -0
- htmlgraph/docs/API_REFERENCE.md +841 -0
- htmlgraph/docs/HTTP_API.md +750 -0
- htmlgraph/docs/INTEGRATION_GUIDE.md +752 -0
- htmlgraph/docs/ORCHESTRATION_PATTERNS.md +717 -0
- htmlgraph/docs/README.md +532 -0
- htmlgraph/docs/__init__.py +77 -0
- htmlgraph/docs/docs_version.py +55 -0
- htmlgraph/docs/metadata.py +93 -0
- htmlgraph/docs/migrations.py +232 -0
- htmlgraph/docs/template_engine.py +143 -0
- htmlgraph/docs/templates/_sections/cli_reference.md.j2 +52 -0
- htmlgraph/docs/templates/_sections/core_concepts.md.j2 +29 -0
- htmlgraph/docs/templates/_sections/sdk_basics.md.j2 +69 -0
- htmlgraph/docs/templates/base_agents.md.j2 +78 -0
- htmlgraph/docs/templates/example_user_override.md.j2 +47 -0
- htmlgraph/docs/version_check.py +163 -0
- htmlgraph/edge_index.py +182 -27
- htmlgraph/error_handler.py +544 -0
- htmlgraph/event_log.py +100 -52
- htmlgraph/event_migration.py +13 -4
- htmlgraph/exceptions.py +49 -0
- htmlgraph/file_watcher.py +101 -28
- htmlgraph/find_api.py +75 -63
- htmlgraph/git_events.py +145 -63
- htmlgraph/graph.py +1122 -106
- htmlgraph/hooks/.htmlgraph/.session-warning-state.json +6 -0
- htmlgraph/hooks/.htmlgraph/agents.json +72 -0
- htmlgraph/hooks/.htmlgraph/index.sqlite +0 -0
- htmlgraph/hooks/__init__.py +45 -0
- htmlgraph/hooks/bootstrap.py +169 -0
- htmlgraph/hooks/cigs_pretool_enforcer.py +354 -0
- htmlgraph/hooks/concurrent_sessions.py +208 -0
- htmlgraph/hooks/context.py +350 -0
- htmlgraph/hooks/drift_handler.py +525 -0
- htmlgraph/hooks/event_tracker.py +1314 -0
- htmlgraph/hooks/git_commands.py +175 -0
- htmlgraph/hooks/hooks-config.example.json +12 -0
- htmlgraph/hooks/installer.py +343 -0
- htmlgraph/hooks/orchestrator.py +674 -0
- htmlgraph/hooks/orchestrator_reflector.py +223 -0
- htmlgraph/hooks/post-checkout.sh +28 -0
- htmlgraph/hooks/post-commit.sh +24 -0
- htmlgraph/hooks/post-merge.sh +26 -0
- htmlgraph/hooks/post_tool_use_failure.py +273 -0
- htmlgraph/hooks/post_tool_use_handler.py +257 -0
- htmlgraph/hooks/posttooluse.py +408 -0
- htmlgraph/hooks/pre-commit.sh +94 -0
- htmlgraph/hooks/pre-push.sh +28 -0
- htmlgraph/hooks/pretooluse.py +819 -0
- htmlgraph/hooks/prompt_analyzer.py +637 -0
- htmlgraph/hooks/session_handler.py +668 -0
- htmlgraph/hooks/session_summary.py +395 -0
- htmlgraph/hooks/state_manager.py +504 -0
- htmlgraph/hooks/subagent_detection.py +202 -0
- htmlgraph/hooks/subagent_stop.py +369 -0
- htmlgraph/hooks/task_enforcer.py +255 -0
- htmlgraph/hooks/task_validator.py +177 -0
- htmlgraph/hooks/validator.py +628 -0
- htmlgraph/ids.py +41 -27
- htmlgraph/index.d.ts +286 -0
- htmlgraph/learning.py +767 -0
- htmlgraph/mcp_server.py +69 -23
- htmlgraph/models.py +1586 -87
- htmlgraph/operations/README.md +62 -0
- htmlgraph/operations/__init__.py +79 -0
- htmlgraph/operations/analytics.py +339 -0
- htmlgraph/operations/bootstrap.py +289 -0
- htmlgraph/operations/events.py +244 -0
- htmlgraph/operations/fastapi_server.py +231 -0
- htmlgraph/operations/hooks.py +350 -0
- htmlgraph/operations/initialization.py +597 -0
- htmlgraph/operations/initialization.py.backup +228 -0
- htmlgraph/operations/server.py +303 -0
- htmlgraph/orchestration/__init__.py +58 -0
- htmlgraph/orchestration/claude_launcher.py +179 -0
- htmlgraph/orchestration/command_builder.py +72 -0
- htmlgraph/orchestration/headless_spawner.py +281 -0
- htmlgraph/orchestration/live_events.py +377 -0
- htmlgraph/orchestration/model_selection.py +327 -0
- htmlgraph/orchestration/plugin_manager.py +140 -0
- htmlgraph/orchestration/prompts.py +137 -0
- htmlgraph/orchestration/spawner_event_tracker.py +383 -0
- htmlgraph/orchestration/spawners/__init__.py +16 -0
- htmlgraph/orchestration/spawners/base.py +194 -0
- htmlgraph/orchestration/spawners/claude.py +173 -0
- htmlgraph/orchestration/spawners/codex.py +435 -0
- htmlgraph/orchestration/spawners/copilot.py +294 -0
- htmlgraph/orchestration/spawners/gemini.py +471 -0
- htmlgraph/orchestration/subprocess_runner.py +36 -0
- htmlgraph/orchestration/task_coordination.py +343 -0
- htmlgraph/orchestration.md +563 -0
- htmlgraph/orchestrator-system-prompt-optimized.txt +863 -0
- htmlgraph/orchestrator.py +669 -0
- htmlgraph/orchestrator_config.py +357 -0
- htmlgraph/orchestrator_mode.py +328 -0
- htmlgraph/orchestrator_validator.py +133 -0
- htmlgraph/parallel.py +646 -0
- htmlgraph/parser.py +160 -35
- htmlgraph/path_query.py +608 -0
- htmlgraph/pattern_matcher.py +636 -0
- htmlgraph/planning.py +147 -52
- htmlgraph/pydantic_models.py +476 -0
- htmlgraph/quality_gates.py +350 -0
- htmlgraph/query_builder.py +109 -72
- htmlgraph/query_composer.py +509 -0
- htmlgraph/reflection.py +443 -0
- htmlgraph/refs.py +344 -0
- htmlgraph/repo_hash.py +512 -0
- htmlgraph/repositories/__init__.py +292 -0
- htmlgraph/repositories/analytics_repository.py +455 -0
- htmlgraph/repositories/analytics_repository_standard.py +628 -0
- htmlgraph/repositories/feature_repository.py +581 -0
- htmlgraph/repositories/feature_repository_htmlfile.py +668 -0
- htmlgraph/repositories/feature_repository_memory.py +607 -0
- htmlgraph/repositories/feature_repository_sqlite.py +858 -0
- htmlgraph/repositories/filter_service.py +620 -0
- htmlgraph/repositories/filter_service_standard.py +445 -0
- htmlgraph/repositories/shared_cache.py +621 -0
- htmlgraph/repositories/shared_cache_memory.py +395 -0
- htmlgraph/repositories/track_repository.py +552 -0
- htmlgraph/repositories/track_repository_htmlfile.py +619 -0
- htmlgraph/repositories/track_repository_memory.py +508 -0
- htmlgraph/repositories/track_repository_sqlite.py +711 -0
- htmlgraph/routing.py +8 -19
- htmlgraph/scripts/deploy.py +1 -2
- htmlgraph/sdk/__init__.py +398 -0
- htmlgraph/sdk/__init__.pyi +14 -0
- htmlgraph/sdk/analytics/__init__.py +19 -0
- htmlgraph/sdk/analytics/engine.py +155 -0
- htmlgraph/sdk/analytics/helpers.py +178 -0
- htmlgraph/sdk/analytics/registry.py +109 -0
- htmlgraph/sdk/base.py +484 -0
- htmlgraph/sdk/constants.py +216 -0
- htmlgraph/sdk/core.pyi +308 -0
- htmlgraph/sdk/discovery.py +120 -0
- htmlgraph/sdk/help/__init__.py +12 -0
- htmlgraph/sdk/help/mixin.py +699 -0
- htmlgraph/sdk/mixins/__init__.py +15 -0
- htmlgraph/sdk/mixins/attribution.py +113 -0
- htmlgraph/sdk/mixins/mixin.py +410 -0
- htmlgraph/sdk/operations/__init__.py +12 -0
- htmlgraph/sdk/operations/mixin.py +427 -0
- htmlgraph/sdk/orchestration/__init__.py +17 -0
- htmlgraph/sdk/orchestration/coordinator.py +203 -0
- htmlgraph/sdk/orchestration/spawner.py +204 -0
- htmlgraph/sdk/planning/__init__.py +19 -0
- htmlgraph/sdk/planning/bottlenecks.py +93 -0
- htmlgraph/sdk/planning/mixin.py +211 -0
- htmlgraph/sdk/planning/parallel.py +186 -0
- htmlgraph/sdk/planning/queue.py +210 -0
- htmlgraph/sdk/planning/recommendations.py +87 -0
- htmlgraph/sdk/planning/smart_planning.py +319 -0
- htmlgraph/sdk/session/__init__.py +19 -0
- htmlgraph/sdk/session/continuity.py +57 -0
- htmlgraph/sdk/session/handoff.py +110 -0
- htmlgraph/sdk/session/info.py +309 -0
- htmlgraph/sdk/session/manager.py +103 -0
- htmlgraph/sdk/strategic/__init__.py +26 -0
- htmlgraph/sdk/strategic/mixin.py +563 -0
- htmlgraph/server.py +685 -180
- htmlgraph/services/__init__.py +10 -0
- htmlgraph/services/claiming.py +199 -0
- htmlgraph/session_hooks.py +300 -0
- htmlgraph/session_manager.py +1392 -175
- htmlgraph/session_registry.py +587 -0
- htmlgraph/session_state.py +436 -0
- htmlgraph/session_warning.py +201 -0
- htmlgraph/sessions/__init__.py +23 -0
- htmlgraph/sessions/handoff.py +756 -0
- htmlgraph/setup.py +34 -17
- htmlgraph/spike_index.py +143 -0
- htmlgraph/sync_docs.py +12 -15
- htmlgraph/system_prompts.py +450 -0
- htmlgraph/templates/AGENTS.md.template +366 -0
- htmlgraph/templates/CLAUDE.md.template +97 -0
- htmlgraph/templates/GEMINI.md.template +87 -0
- htmlgraph/templates/orchestration-view.html +350 -0
- htmlgraph/track_builder.py +146 -15
- htmlgraph/track_manager.py +69 -21
- htmlgraph/transcript.py +890 -0
- htmlgraph/transcript_analytics.py +699 -0
- htmlgraph/types.py +323 -0
- htmlgraph/validation.py +115 -0
- htmlgraph/watch.py +8 -5
- htmlgraph/work_type_utils.py +3 -2
- {htmlgraph-0.9.3.data → htmlgraph-0.27.5.data}/data/htmlgraph/dashboard.html +2406 -307
- htmlgraph-0.27.5.data/data/htmlgraph/templates/AGENTS.md.template +366 -0
- htmlgraph-0.27.5.data/data/htmlgraph/templates/CLAUDE.md.template +97 -0
- htmlgraph-0.27.5.data/data/htmlgraph/templates/GEMINI.md.template +87 -0
- {htmlgraph-0.9.3.dist-info → htmlgraph-0.27.5.dist-info}/METADATA +97 -64
- htmlgraph-0.27.5.dist-info/RECORD +337 -0
- {htmlgraph-0.9.3.dist-info → htmlgraph-0.27.5.dist-info}/entry_points.txt +1 -1
- htmlgraph/cli.py +0 -2688
- htmlgraph/sdk.py +0 -709
- htmlgraph-0.9.3.dist-info/RECORD +0 -61
- {htmlgraph-0.9.3.data → htmlgraph-0.27.5.data}/data/htmlgraph/styles.css +0 -0
- {htmlgraph-0.9.3.dist-info → htmlgraph-0.27.5.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Helper functions for analytics initialization and management.
|
|
3
|
+
|
|
4
|
+
Provides utility functions for:
|
|
5
|
+
- Analytics engine initialization
|
|
6
|
+
- Lazy loading coordination
|
|
7
|
+
- Analytics lifecycle management
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
from typing import TYPE_CHECKING, Any
|
|
14
|
+
|
|
15
|
+
if TYPE_CHECKING:
|
|
16
|
+
from htmlgraph.graph import HtmlGraph
|
|
17
|
+
from htmlgraph.sdk.analytics.engine import AnalyticsEngine
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def create_analytics_engine(
|
|
21
|
+
sdk: Any,
|
|
22
|
+
graph: HtmlGraph,
|
|
23
|
+
directory: Path | str,
|
|
24
|
+
) -> AnalyticsEngine:
|
|
25
|
+
"""
|
|
26
|
+
Create and initialize an analytics engine.
|
|
27
|
+
|
|
28
|
+
Args:
|
|
29
|
+
sdk: SDK instance (parent)
|
|
30
|
+
graph: HtmlGraph instance
|
|
31
|
+
directory: .htmlgraph directory path
|
|
32
|
+
|
|
33
|
+
Returns:
|
|
34
|
+
Initialized AnalyticsEngine instance
|
|
35
|
+
|
|
36
|
+
Example:
|
|
37
|
+
>>> from htmlgraph import SDK
|
|
38
|
+
>>> from htmlgraph.sdk.analytics.helpers import create_analytics_engine
|
|
39
|
+
>>>
|
|
40
|
+
>>> sdk = SDK(agent="claude")
|
|
41
|
+
>>> engine = create_analytics_engine(sdk, sdk._graph, sdk._directory)
|
|
42
|
+
>>> dist = engine.analytics.work_type_distribution()
|
|
43
|
+
"""
|
|
44
|
+
from htmlgraph.sdk.analytics.engine import AnalyticsEngine
|
|
45
|
+
|
|
46
|
+
return AnalyticsEngine(sdk=sdk, graph=graph, directory=directory)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def validate_analytics_access(analytics_engine: AnalyticsEngine) -> dict[str, bool]:
|
|
50
|
+
"""
|
|
51
|
+
Validate that all analytics interfaces are accessible.
|
|
52
|
+
|
|
53
|
+
Tests lazy loading for all analytics properties without
|
|
54
|
+
triggering expensive operations.
|
|
55
|
+
|
|
56
|
+
Args:
|
|
57
|
+
analytics_engine: AnalyticsEngine instance to validate
|
|
58
|
+
|
|
59
|
+
Returns:
|
|
60
|
+
Dict mapping analytics name to availability status
|
|
61
|
+
|
|
62
|
+
Example:
|
|
63
|
+
>>> from htmlgraph import SDK
|
|
64
|
+
>>> from htmlgraph.sdk.analytics.helpers import validate_analytics_access
|
|
65
|
+
>>>
|
|
66
|
+
>>> sdk = SDK(agent="claude")
|
|
67
|
+
>>> status = validate_analytics_access(sdk._analytics_engine)
|
|
68
|
+
>>> assert all(status.values()), "All analytics should be accessible"
|
|
69
|
+
"""
|
|
70
|
+
status = {}
|
|
71
|
+
|
|
72
|
+
try:
|
|
73
|
+
# Test Analytics interface
|
|
74
|
+
_ = analytics_engine.analytics
|
|
75
|
+
status["analytics"] = True
|
|
76
|
+
except Exception:
|
|
77
|
+
status["analytics"] = False
|
|
78
|
+
|
|
79
|
+
try:
|
|
80
|
+
# Test DependencyAnalytics interface
|
|
81
|
+
_ = analytics_engine.dep_analytics
|
|
82
|
+
status["dep_analytics"] = True
|
|
83
|
+
except Exception:
|
|
84
|
+
status["dep_analytics"] = False
|
|
85
|
+
|
|
86
|
+
try:
|
|
87
|
+
# Test CrossSessionAnalytics interface
|
|
88
|
+
_ = analytics_engine.cross_session_analytics
|
|
89
|
+
status["cross_session_analytics"] = True
|
|
90
|
+
except Exception:
|
|
91
|
+
status["cross_session_analytics"] = False
|
|
92
|
+
|
|
93
|
+
try:
|
|
94
|
+
# Test ContextAnalytics interface
|
|
95
|
+
_ = analytics_engine.context
|
|
96
|
+
status["context"] = True
|
|
97
|
+
except Exception:
|
|
98
|
+
status["context"] = False
|
|
99
|
+
|
|
100
|
+
try:
|
|
101
|
+
# Test PatternLearner interface
|
|
102
|
+
_ = analytics_engine.pattern_learning
|
|
103
|
+
status["pattern_learning"] = True
|
|
104
|
+
except Exception:
|
|
105
|
+
status["pattern_learning"] = False
|
|
106
|
+
|
|
107
|
+
return status
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def get_analytics_summary(analytics_engine: AnalyticsEngine) -> dict[str, Any]:
|
|
111
|
+
"""
|
|
112
|
+
Get a summary of available analytics capabilities.
|
|
113
|
+
|
|
114
|
+
Returns metadata about each analytics interface including
|
|
115
|
+
availability and key methods.
|
|
116
|
+
|
|
117
|
+
Args:
|
|
118
|
+
analytics_engine: AnalyticsEngine instance
|
|
119
|
+
|
|
120
|
+
Returns:
|
|
121
|
+
Dict with analytics metadata
|
|
122
|
+
|
|
123
|
+
Example:
|
|
124
|
+
>>> from htmlgraph import SDK
|
|
125
|
+
>>> from htmlgraph.sdk.analytics.helpers import get_analytics_summary
|
|
126
|
+
>>>
|
|
127
|
+
>>> sdk = SDK(agent="claude")
|
|
128
|
+
>>> summary = get_analytics_summary(sdk._analytics_engine)
|
|
129
|
+
>>> print(summary["analytics"]["methods"])
|
|
130
|
+
"""
|
|
131
|
+
return {
|
|
132
|
+
"analytics": {
|
|
133
|
+
"available": analytics_engine._analytics is not None,
|
|
134
|
+
"description": "Work type distribution and session analytics",
|
|
135
|
+
"methods": [
|
|
136
|
+
"work_type_distribution",
|
|
137
|
+
"spike_to_feature_ratio",
|
|
138
|
+
"maintenance_burden",
|
|
139
|
+
"get_sessions_by_work_type",
|
|
140
|
+
],
|
|
141
|
+
},
|
|
142
|
+
"dep_analytics": {
|
|
143
|
+
"available": analytics_engine._dep_analytics is not None,
|
|
144
|
+
"description": "Dependency-aware graph analysis",
|
|
145
|
+
"methods": [
|
|
146
|
+
"find_bottlenecks",
|
|
147
|
+
"find_critical_path",
|
|
148
|
+
"find_parallelization_opportunities",
|
|
149
|
+
"recommend_next_tasks",
|
|
150
|
+
"assess_risk",
|
|
151
|
+
],
|
|
152
|
+
},
|
|
153
|
+
"cross_session_analytics": {
|
|
154
|
+
"available": analytics_engine._cross_session_analytics is not None,
|
|
155
|
+
"description": "Git commit-based cross-session tracking",
|
|
156
|
+
"methods": [
|
|
157
|
+
"work_in_commit_range",
|
|
158
|
+
"sessions_for_feature",
|
|
159
|
+
"work_by_author",
|
|
160
|
+
],
|
|
161
|
+
},
|
|
162
|
+
"context": {
|
|
163
|
+
"available": analytics_engine._context_analytics is not None,
|
|
164
|
+
"description": "Context usage tracking and analytics",
|
|
165
|
+
"methods": [
|
|
166
|
+
"get_session_usage",
|
|
167
|
+
"get_feature_usage",
|
|
168
|
+
"get_track_usage",
|
|
169
|
+
],
|
|
170
|
+
},
|
|
171
|
+
"pattern_learning": {
|
|
172
|
+
"available": analytics_engine._pattern_learning is not None,
|
|
173
|
+
"description": "Behavior pattern learning",
|
|
174
|
+
"methods": [
|
|
175
|
+
# Methods depend on PatternLearner implementation
|
|
176
|
+
],
|
|
177
|
+
},
|
|
178
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Analytics Registry Mixin for SDK.
|
|
3
|
+
|
|
4
|
+
Provides property-based access to analytics interfaces via composition.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
from typing import TYPE_CHECKING, Any
|
|
10
|
+
|
|
11
|
+
if TYPE_CHECKING:
|
|
12
|
+
from htmlgraph.analytics import (
|
|
13
|
+
Analytics,
|
|
14
|
+
CrossSessionAnalytics,
|
|
15
|
+
DependencyAnalytics,
|
|
16
|
+
)
|
|
17
|
+
from htmlgraph.context_analytics import ContextAnalytics
|
|
18
|
+
from htmlgraph.sdk.analytics.engine import AnalyticsEngine
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class AnalyticsRegistry:
|
|
22
|
+
"""
|
|
23
|
+
Mixin that provides property-based access to analytics.
|
|
24
|
+
|
|
25
|
+
Delegates to AnalyticsEngine for lazy loading while maintaining
|
|
26
|
+
backward-compatible property API.
|
|
27
|
+
|
|
28
|
+
Properties:
|
|
29
|
+
analytics: Work type analytics
|
|
30
|
+
dep_analytics: Dependency analytics
|
|
31
|
+
cross_session_analytics: Cross-session analytics
|
|
32
|
+
context: Context analytics
|
|
33
|
+
pattern_learning: Pattern learning
|
|
34
|
+
|
|
35
|
+
Example:
|
|
36
|
+
>>> class SDK(AnalyticsRegistry):
|
|
37
|
+
... def __init__(self):
|
|
38
|
+
... self._analytics_engine = AnalyticsEngine(...)
|
|
39
|
+
...
|
|
40
|
+
>>> sdk = SDK()
|
|
41
|
+
>>> sdk.analytics.work_type_distribution()
|
|
42
|
+
>>> sdk.dep_analytics.find_bottlenecks()
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
_analytics_engine: AnalyticsEngine
|
|
46
|
+
|
|
47
|
+
@property
|
|
48
|
+
def analytics(self) -> Analytics:
|
|
49
|
+
"""
|
|
50
|
+
Work type analytics interface (lazy-loaded).
|
|
51
|
+
|
|
52
|
+
Provides session-level work type analysis, distribution metrics,
|
|
53
|
+
and work type filtering.
|
|
54
|
+
|
|
55
|
+
Returns:
|
|
56
|
+
Analytics instance
|
|
57
|
+
"""
|
|
58
|
+
return self._analytics_engine.analytics
|
|
59
|
+
|
|
60
|
+
@property
|
|
61
|
+
def dep_analytics(self) -> DependencyAnalytics:
|
|
62
|
+
"""
|
|
63
|
+
Dependency analytics interface (lazy-loaded).
|
|
64
|
+
|
|
65
|
+
Provides graph-based dependency analysis including bottleneck
|
|
66
|
+
detection, critical path analysis, and parallelization recommendations.
|
|
67
|
+
|
|
68
|
+
Returns:
|
|
69
|
+
DependencyAnalytics instance
|
|
70
|
+
"""
|
|
71
|
+
return self._analytics_engine.dep_analytics
|
|
72
|
+
|
|
73
|
+
@property
|
|
74
|
+
def cross_session_analytics(self) -> CrossSessionAnalytics:
|
|
75
|
+
"""
|
|
76
|
+
Cross-session analytics interface (lazy-loaded).
|
|
77
|
+
|
|
78
|
+
Provides Git commit-based analytics spanning multiple sessions
|
|
79
|
+
and tracking work across the project history.
|
|
80
|
+
|
|
81
|
+
Returns:
|
|
82
|
+
CrossSessionAnalytics instance
|
|
83
|
+
"""
|
|
84
|
+
return self._analytics_engine.cross_session_analytics
|
|
85
|
+
|
|
86
|
+
@property
|
|
87
|
+
def context(self) -> ContextAnalytics:
|
|
88
|
+
"""
|
|
89
|
+
Context analytics interface (lazy-loaded).
|
|
90
|
+
|
|
91
|
+
Provides hierarchical context usage tracking and analytics
|
|
92
|
+
from Activity → Session → Feature → Track.
|
|
93
|
+
|
|
94
|
+
Returns:
|
|
95
|
+
ContextAnalytics instance
|
|
96
|
+
"""
|
|
97
|
+
return self._analytics_engine.context
|
|
98
|
+
|
|
99
|
+
@property
|
|
100
|
+
def pattern_learning(self) -> Any:
|
|
101
|
+
"""
|
|
102
|
+
Pattern learning interface (lazy-loaded).
|
|
103
|
+
|
|
104
|
+
Provides behavior pattern learning and analysis capabilities.
|
|
105
|
+
|
|
106
|
+
Returns:
|
|
107
|
+
PatternLearner instance
|
|
108
|
+
"""
|
|
109
|
+
return self._analytics_engine.pattern_learning
|