htmlgraph 0.20.1__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 +51 -1
- htmlgraph/__init__.pyi +123 -0
- htmlgraph/agent_detection.py +26 -10
- htmlgraph/agent_registry.py +2 -1
- htmlgraph/analytics/__init__.py +8 -1
- htmlgraph/analytics/cli.py +86 -20
- 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 +10 -6
- 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 +67 -27
- htmlgraph/analytics_index.py +53 -20
- 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 +2 -1
- htmlgraph/bounded_paths.py +539 -0
- htmlgraph/builders/base.py +57 -2
- htmlgraph/builders/bug.py +19 -3
- htmlgraph/builders/chore.py +19 -3
- htmlgraph/builders/epic.py +19 -3
- htmlgraph/builders/feature.py +27 -3
- htmlgraph/builders/insight.py +2 -1
- htmlgraph/builders/metric.py +2 -1
- htmlgraph/builders/pattern.py +2 -1
- htmlgraph/builders/phase.py +19 -3
- htmlgraph/builders/spike.py +29 -3
- htmlgraph/builders/track.py +42 -1
- 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 +2 -0
- htmlgraph/collections/base.py +197 -14
- htmlgraph/collections/bug.py +2 -1
- htmlgraph/collections/chore.py +2 -1
- htmlgraph/collections/epic.py +2 -1
- htmlgraph/collections/feature.py +2 -1
- htmlgraph/collections/insight.py +2 -1
- htmlgraph/collections/metric.py +2 -1
- htmlgraph/collections/pattern.py +2 -1
- htmlgraph/collections/phase.py +2 -1
- htmlgraph/collections/session.py +194 -0
- htmlgraph/collections/spike.py +13 -2
- htmlgraph/collections/task_delegation.py +241 -0
- htmlgraph/collections/todo.py +14 -1
- htmlgraph/collections/traces.py +487 -0
- htmlgraph/config/cost_models.json +56 -0
- htmlgraph/config.py +190 -0
- htmlgraph/context_analytics.py +2 -1
- htmlgraph/converter.py +116 -7
- htmlgraph/cost_analysis/__init__.py +5 -0
- htmlgraph/cost_analysis/analyzer.py +438 -0
- htmlgraph/dashboard.html +2246 -248
- 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 +2 -1
- htmlgraph/deploy.py +26 -27
- 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 +2 -1
- htmlgraph/error_handler.py +544 -0
- htmlgraph/event_log.py +86 -37
- htmlgraph/event_migration.py +2 -1
- htmlgraph/file_watcher.py +12 -8
- htmlgraph/find_api.py +2 -1
- htmlgraph/git_events.py +67 -9
- 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 +8 -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 +790 -99
- htmlgraph/hooks/git_commands.py +175 -0
- htmlgraph/hooks/installer.py +5 -1
- htmlgraph/hooks/orchestrator.py +327 -76
- htmlgraph/hooks/orchestrator_reflector.py +31 -4
- htmlgraph/hooks/post_tool_use_failure.py +32 -7
- htmlgraph/hooks/post_tool_use_handler.py +257 -0
- htmlgraph/hooks/posttooluse.py +92 -19
- htmlgraph/hooks/pretooluse.py +527 -7
- 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 +99 -4
- htmlgraph/hooks/validator.py +212 -91
- htmlgraph/ids.py +2 -1
- htmlgraph/learning.py +125 -100
- htmlgraph/mcp_server.py +2 -1
- htmlgraph/models.py +217 -18
- 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.py → orchestration/task_coordination.py} +16 -8
- htmlgraph/orchestration.md +563 -0
- htmlgraph/orchestrator-system-prompt-optimized.txt +863 -0
- htmlgraph/orchestrator.py +2 -1
- htmlgraph/orchestrator_config.py +357 -0
- htmlgraph/orchestrator_mode.py +115 -4
- htmlgraph/parallel.py +2 -1
- htmlgraph/parser.py +86 -6
- htmlgraph/path_query.py +608 -0
- htmlgraph/pattern_matcher.py +636 -0
- htmlgraph/pydantic_models.py +476 -0
- htmlgraph/quality_gates.py +350 -0
- htmlgraph/query_builder.py +2 -1
- 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/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 +295 -107
- htmlgraph/session_hooks.py +300 -0
- htmlgraph/session_manager.py +285 -3
- htmlgraph/session_registry.py +587 -0
- htmlgraph/session_state.py +436 -0
- htmlgraph/session_warning.py +2 -1
- htmlgraph/sessions/__init__.py +23 -0
- htmlgraph/sessions/handoff.py +756 -0
- htmlgraph/system_prompts.py +450 -0
- htmlgraph/templates/orchestration-view.html +350 -0
- htmlgraph/track_builder.py +33 -1
- htmlgraph/track_manager.py +38 -0
- htmlgraph/transcript.py +18 -5
- htmlgraph/validation.py +115 -0
- htmlgraph/watch.py +2 -1
- htmlgraph/work_type_utils.py +2 -1
- {htmlgraph-0.20.1.data → htmlgraph-0.27.5.data}/data/htmlgraph/dashboard.html +2246 -248
- {htmlgraph-0.20.1.dist-info → htmlgraph-0.27.5.dist-info}/METADATA +95 -64
- htmlgraph-0.27.5.dist-info/RECORD +337 -0
- {htmlgraph-0.20.1.dist-info → htmlgraph-0.27.5.dist-info}/entry_points.txt +1 -1
- htmlgraph/cli.py +0 -4839
- htmlgraph/sdk.py +0 -2359
- htmlgraph-0.20.1.dist-info/RECORD +0 -118
- {htmlgraph-0.20.1.data → htmlgraph-0.27.5.data}/data/htmlgraph/styles.css +0 -0
- {htmlgraph-0.20.1.data → htmlgraph-0.27.5.data}/data/htmlgraph/templates/AGENTS.md.template +0 -0
- {htmlgraph-0.20.1.data → htmlgraph-0.27.5.data}/data/htmlgraph/templates/CLAUDE.md.template +0 -0
- {htmlgraph-0.20.1.data → htmlgraph-0.27.5.data}/data/htmlgraph/templates/GEMINI.md.template +0 -0
- {htmlgraph-0.20.1.dist-info → htmlgraph-0.27.5.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{# Example user override template - copy to .htmlgraph/docs/templates/agents.md.j2 #}
|
|
2
|
+
{% extends "base_agents.md.j2" %}
|
|
3
|
+
|
|
4
|
+
{# Override the header to customize branding #}
|
|
5
|
+
{% block header %}
|
|
6
|
+
# 🤖 {{ platform|title }} Agent - Our Team Documentation
|
|
7
|
+
{% endblock %}
|
|
8
|
+
|
|
9
|
+
{# Add custom team workflows #}
|
|
10
|
+
{% block custom_workflows %}
|
|
11
|
+
## Our Team Conventions
|
|
12
|
+
|
|
13
|
+
### Daily Workflow
|
|
14
|
+
1. **Morning Standup** - Review `sdk.summary()` for overnight progress
|
|
15
|
+
2. **Pick Task** - Use `sdk.analytics.recommend_next_work()` for priorities
|
|
16
|
+
3. **Daily Feature** - Create with template: `feat-{YYYYMMDD}-{description}`
|
|
17
|
+
4. **End of Day** - Commit with `./scripts/git-commit-push.sh`
|
|
18
|
+
|
|
19
|
+
### Commit Message Format
|
|
20
|
+
```
|
|
21
|
+
type(scope): description
|
|
22
|
+
|
|
23
|
+
Examples:
|
|
24
|
+
- feat(auth): add OAuth provider integration
|
|
25
|
+
- fix(api): resolve session timeout bug
|
|
26
|
+
- docs(readme): update installation steps
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Branch Strategy
|
|
30
|
+
- `main` - Production-ready code
|
|
31
|
+
- `feature/*` - New features
|
|
32
|
+
- `fix/*` - Bug fixes
|
|
33
|
+
- `spike/*` - Research and experimentation
|
|
34
|
+
|
|
35
|
+
### Code Review Checklist
|
|
36
|
+
- [ ] All tests pass
|
|
37
|
+
- [ ] Documentation updated
|
|
38
|
+
- [ ] No sensitive data in code
|
|
39
|
+
- [ ] Ruff and mypy pass
|
|
40
|
+
- [ ] Feature tracked in HtmlGraph
|
|
41
|
+
{% endblock %}
|
|
42
|
+
|
|
43
|
+
{# You can also override other blocks:
|
|
44
|
+
- introduction: Project-specific intro
|
|
45
|
+
- deployment: Team-specific deployment process
|
|
46
|
+
- footer: Custom footer with team info
|
|
47
|
+
#}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Version checking and interactive upgrade workflows.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
from typing import TYPE_CHECKING
|
|
7
|
+
|
|
8
|
+
from rich.prompt import Prompt
|
|
9
|
+
|
|
10
|
+
from htmlgraph.docs.docs_version import get_current_doc_version, is_compatible
|
|
11
|
+
from htmlgraph.docs.metadata import DocsMetadata
|
|
12
|
+
from htmlgraph.docs.migrations import get_migration
|
|
13
|
+
|
|
14
|
+
if TYPE_CHECKING:
|
|
15
|
+
from htmlgraph.docs.migrations import MigrationScript
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def check_docs_version(htmlgraph_dir: Path) -> tuple[bool, str | None]:
|
|
19
|
+
"""Check if docs version is compatible.
|
|
20
|
+
|
|
21
|
+
Args:
|
|
22
|
+
htmlgraph_dir: Path to .htmlgraph directory
|
|
23
|
+
|
|
24
|
+
Returns:
|
|
25
|
+
Tuple of (is_compatible, message)
|
|
26
|
+
- is_compatible: True if compatible
|
|
27
|
+
- message: Optional warning/error message
|
|
28
|
+
"""
|
|
29
|
+
metadata = DocsMetadata.load(htmlgraph_dir)
|
|
30
|
+
current_version = get_current_doc_version()
|
|
31
|
+
|
|
32
|
+
if metadata.schema_version == current_version:
|
|
33
|
+
return True, None
|
|
34
|
+
|
|
35
|
+
if is_compatible(metadata.schema_version, current_version):
|
|
36
|
+
return (
|
|
37
|
+
True,
|
|
38
|
+
f"⚠️ Docs version {metadata.schema_version} is supported but outdated (current: {current_version})",
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
return (
|
|
42
|
+
False,
|
|
43
|
+
f"❌ Docs version {metadata.schema_version} is incompatible with package (requires: {current_version})",
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def upgrade_docs_interactive(htmlgraph_dir: Path) -> None:
|
|
48
|
+
"""Interactive upgrade workflow with user prompts.
|
|
49
|
+
|
|
50
|
+
Args:
|
|
51
|
+
htmlgraph_dir: Path to .htmlgraph directory
|
|
52
|
+
"""
|
|
53
|
+
metadata = DocsMetadata.load(htmlgraph_dir)
|
|
54
|
+
current_version = get_current_doc_version()
|
|
55
|
+
|
|
56
|
+
if metadata.schema_version == current_version:
|
|
57
|
+
print("✅ Docs are up to date")
|
|
58
|
+
return
|
|
59
|
+
|
|
60
|
+
# Get migration script
|
|
61
|
+
migration = get_migration(metadata.schema_version, current_version)
|
|
62
|
+
if not migration:
|
|
63
|
+
print(
|
|
64
|
+
f"❌ No migration available from v{metadata.schema_version} to v{current_version}"
|
|
65
|
+
)
|
|
66
|
+
return
|
|
67
|
+
|
|
68
|
+
# Show user their options
|
|
69
|
+
print(
|
|
70
|
+
f"""
|
|
71
|
+
📋 Documentation Upgrade Available
|
|
72
|
+
Current: v{metadata.schema_version}
|
|
73
|
+
Target: v{current_version}
|
|
74
|
+
|
|
75
|
+
Options:
|
|
76
|
+
1. Auto-migrate (preserves customizations)
|
|
77
|
+
2. Side-by-side (test before committing)
|
|
78
|
+
3. Manual migration (view diff first)
|
|
79
|
+
4. Skip (stay on v{metadata.schema_version})
|
|
80
|
+
"""
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
choice = Prompt.ask("Choose option", choices=["1", "2", "3", "4"], default="4")
|
|
84
|
+
|
|
85
|
+
if choice == "1":
|
|
86
|
+
_auto_migrate(htmlgraph_dir, migration)
|
|
87
|
+
elif choice == "2":
|
|
88
|
+
_side_by_side_migrate(htmlgraph_dir, migration)
|
|
89
|
+
elif choice == "3":
|
|
90
|
+
_show_diff_for_manual(htmlgraph_dir, migration)
|
|
91
|
+
else:
|
|
92
|
+
print("⏭️ Skipping migration")
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def _auto_migrate(htmlgraph_dir: Path, migration: "MigrationScript") -> None: # type: ignore[name-defined]
|
|
96
|
+
"""Automatically migrate with backup.
|
|
97
|
+
|
|
98
|
+
Args:
|
|
99
|
+
htmlgraph_dir: Path to .htmlgraph directory
|
|
100
|
+
migration: MigrationScript instance
|
|
101
|
+
"""
|
|
102
|
+
backup_dir = htmlgraph_dir / ".docs-backups"
|
|
103
|
+
backup_dir.mkdir(exist_ok=True)
|
|
104
|
+
|
|
105
|
+
print("🚀 Starting auto-migration...")
|
|
106
|
+
success = migration.migrate(htmlgraph_dir, backup_dir)
|
|
107
|
+
|
|
108
|
+
if success:
|
|
109
|
+
print("✅ Migration complete!")
|
|
110
|
+
print(f"📦 Backup saved to {backup_dir}")
|
|
111
|
+
else:
|
|
112
|
+
print("❌ Migration failed. Docs unchanged.")
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def _side_by_side_migrate(htmlgraph_dir: Path, migration: "MigrationScript") -> None: # type: ignore[name-defined]
|
|
116
|
+
"""Create side-by-side versions for testing.
|
|
117
|
+
|
|
118
|
+
Args:
|
|
119
|
+
htmlgraph_dir: Path to .htmlgraph directory
|
|
120
|
+
migration: MigrationScript instance
|
|
121
|
+
"""
|
|
122
|
+
print("📋 Creating side-by-side versions...")
|
|
123
|
+
print("⚠️ Side-by-side migration not yet implemented")
|
|
124
|
+
print(" Use option 1 (auto-migrate) or 3 (manual) instead")
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def _show_diff_for_manual(htmlgraph_dir: Path, migration: "MigrationScript") -> None: # type: ignore[name-defined]
|
|
128
|
+
"""Show diff preview for manual migration.
|
|
129
|
+
|
|
130
|
+
Args:
|
|
131
|
+
htmlgraph_dir: Path to .htmlgraph directory
|
|
132
|
+
migration: MigrationScript instance
|
|
133
|
+
"""
|
|
134
|
+
print("📊 Showing migration preview...")
|
|
135
|
+
print("⚠️ Diff preview not yet implemented")
|
|
136
|
+
print(" Use option 1 (auto-migrate) instead")
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def check_version_on_init(htmlgraph_dir: Path, auto_upgrade: bool = False) -> bool:
|
|
140
|
+
"""Check version compatibility on SDK initialization.
|
|
141
|
+
|
|
142
|
+
Args:
|
|
143
|
+
htmlgraph_dir: Path to .htmlgraph directory
|
|
144
|
+
auto_upgrade: If True, automatically upgrade if safe
|
|
145
|
+
|
|
146
|
+
Returns:
|
|
147
|
+
True if compatible or upgraded successfully
|
|
148
|
+
"""
|
|
149
|
+
compatible, message = check_docs_version(htmlgraph_dir)
|
|
150
|
+
|
|
151
|
+
if compatible and message:
|
|
152
|
+
# Compatible but outdated
|
|
153
|
+
print(message)
|
|
154
|
+
if auto_upgrade:
|
|
155
|
+
upgrade_docs_interactive(htmlgraph_dir)
|
|
156
|
+
return True
|
|
157
|
+
|
|
158
|
+
if not compatible:
|
|
159
|
+
print(message)
|
|
160
|
+
print("\nRun `uv run htmlgraph docs upgrade` to migrate.")
|
|
161
|
+
return False
|
|
162
|
+
|
|
163
|
+
return True
|
htmlgraph/edge_index.py
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
1
3
|
"""
|
|
2
4
|
Edge Index for O(1) reverse edge lookups.
|
|
3
5
|
|
|
@@ -10,7 +12,6 @@ Without this index, finding incoming edges requires scanning all nodes
|
|
|
10
12
|
in the graph - O(V×E) complexity.
|
|
11
13
|
"""
|
|
12
14
|
|
|
13
|
-
from __future__ import annotations
|
|
14
15
|
|
|
15
16
|
from collections import defaultdict
|
|
16
17
|
from collections.abc import Iterator
|