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,699 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Help mixin for SDK - documentation and discoverability.
|
|
3
|
+
|
|
4
|
+
Provides comprehensive help system for SDK methods and collections.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class HelpMixin:
|
|
11
|
+
"""
|
|
12
|
+
Mixin providing help and documentation capabilities to SDK.
|
|
13
|
+
|
|
14
|
+
Adds methods for getting help on SDK usage and improved discoverability.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
def help(self, topic: str | None = None) -> str:
|
|
18
|
+
"""
|
|
19
|
+
Get help on SDK usage.
|
|
20
|
+
|
|
21
|
+
Args:
|
|
22
|
+
topic: Optional topic (e.g., 'features', 'sessions', 'analytics', 'orchestration')
|
|
23
|
+
|
|
24
|
+
Returns:
|
|
25
|
+
Formatted help text
|
|
26
|
+
|
|
27
|
+
Example:
|
|
28
|
+
>>> sdk = SDK(agent="claude")
|
|
29
|
+
>>> print(sdk.help()) # List all topics
|
|
30
|
+
>>> print(sdk.help('features')) # Feature collection help
|
|
31
|
+
>>> print(sdk.help('analytics')) # Analytics help
|
|
32
|
+
|
|
33
|
+
See also:
|
|
34
|
+
Python's built-in help(sdk) for full API documentation
|
|
35
|
+
sdk.features, sdk.bugs, sdk.spikes for work item managers
|
|
36
|
+
"""
|
|
37
|
+
if topic is None:
|
|
38
|
+
return self._help_index()
|
|
39
|
+
return self._help_topic(topic)
|
|
40
|
+
|
|
41
|
+
def _help_index(self) -> str:
|
|
42
|
+
"""Return overview of all available methods/collections."""
|
|
43
|
+
return """HtmlGraph SDK - Quick Reference
|
|
44
|
+
|
|
45
|
+
COLLECTIONS (Work Items):
|
|
46
|
+
sdk.features - Feature work items with builder support
|
|
47
|
+
sdk.bugs - Bug reports
|
|
48
|
+
sdk.spikes - Investigation and research spikes
|
|
49
|
+
sdk.chores - Maintenance and chore tasks
|
|
50
|
+
sdk.epics - Large bodies of work
|
|
51
|
+
sdk.phases - Project phases
|
|
52
|
+
|
|
53
|
+
COLLECTIONS (Non-Work):
|
|
54
|
+
sdk.sessions - Agent sessions
|
|
55
|
+
sdk.tracks - Work tracks with builder support
|
|
56
|
+
sdk.agents - Agent information
|
|
57
|
+
|
|
58
|
+
LEARNING (Active Learning):
|
|
59
|
+
sdk.patterns - Workflow patterns (optimal/anti-pattern)
|
|
60
|
+
sdk.insights - Session health insights
|
|
61
|
+
sdk.metrics - Aggregated time-series metrics
|
|
62
|
+
|
|
63
|
+
CORE METHODS:
|
|
64
|
+
sdk.summary() - Get project summary
|
|
65
|
+
sdk.my_work() - Get current agent's workload
|
|
66
|
+
sdk.next_task() - Get next available task
|
|
67
|
+
sdk.reload() - Reload all data from disk
|
|
68
|
+
|
|
69
|
+
SESSION MANAGEMENT:
|
|
70
|
+
sdk.start_session() - Start a new session
|
|
71
|
+
sdk.end_session() - End a session
|
|
72
|
+
sdk.track_activity() - Track activity in session
|
|
73
|
+
sdk.dedupe_sessions() - Clean up low-signal sessions
|
|
74
|
+
sdk.get_status() - Get project status
|
|
75
|
+
|
|
76
|
+
STRATEGIC ANALYTICS:
|
|
77
|
+
sdk.find_bottlenecks() - Identify blocking tasks
|
|
78
|
+
sdk.recommend_next_work() - Get smart recommendations
|
|
79
|
+
sdk.get_parallel_work() - Find parallelizable work
|
|
80
|
+
sdk.assess_risks() - Assess dependency risks
|
|
81
|
+
sdk.analyze_impact() - Analyze task impact
|
|
82
|
+
|
|
83
|
+
WORK QUEUE:
|
|
84
|
+
sdk.get_work_queue() - Get prioritized work queue
|
|
85
|
+
sdk.work_next() - Get next best task (smart routing)
|
|
86
|
+
|
|
87
|
+
PLANNING WORKFLOW:
|
|
88
|
+
sdk.smart_plan() - Smart planning with research
|
|
89
|
+
sdk.start_planning_spike() - Create planning spike
|
|
90
|
+
sdk.create_track_from_plan() - Create track from plan
|
|
91
|
+
sdk.plan_parallel_work() - Plan parallel execution
|
|
92
|
+
sdk.aggregate_parallel_results() - Aggregate parallel results
|
|
93
|
+
|
|
94
|
+
ORCHESTRATION:
|
|
95
|
+
sdk.spawn_explorer() - Spawn explorer subagent
|
|
96
|
+
sdk.spawn_coder() - Spawn coder subagent
|
|
97
|
+
sdk.orchestrate() - Orchestrate feature implementation
|
|
98
|
+
|
|
99
|
+
SESSION OPTIMIZATION:
|
|
100
|
+
sdk.get_session_start_info() - Get comprehensive session start info
|
|
101
|
+
sdk.get_active_work_item() - Get currently active work item
|
|
102
|
+
|
|
103
|
+
ANALYTICS INTERFACES:
|
|
104
|
+
sdk.analytics - Work type analytics
|
|
105
|
+
sdk.dep_analytics - Dependency analytics
|
|
106
|
+
sdk.context - Context analytics
|
|
107
|
+
|
|
108
|
+
OPERATIONS (Server, Hooks, Events):
|
|
109
|
+
sdk.start_server() - Start web server for graph browsing
|
|
110
|
+
sdk.stop_server() - Stop running server
|
|
111
|
+
sdk.install_hooks() - Install Git hooks for tracking
|
|
112
|
+
sdk.list_hooks() - List Git hooks status
|
|
113
|
+
sdk.export_sessions() - Export HTML sessions to JSONL
|
|
114
|
+
sdk.rebuild_event_index() - Rebuild SQLite index from events
|
|
115
|
+
sdk.query_events() - Query JSONL event logs
|
|
116
|
+
sdk.get_event_stats() - Get event statistics
|
|
117
|
+
sdk.analyze_session() - Analyze single session metrics
|
|
118
|
+
sdk.analyze_project() - Analyze project-wide metrics
|
|
119
|
+
sdk.get_work_recommendations() - Get work recommendations
|
|
120
|
+
|
|
121
|
+
ERROR HANDLING:
|
|
122
|
+
Lookup (.get) - Returns None if not found
|
|
123
|
+
Query (.where) - Returns empty list on no matches
|
|
124
|
+
Edit (.edit) - Raises NodeNotFoundError if missing
|
|
125
|
+
Batch (.mark_done) - Returns dict with success_count, failed_ids, warnings
|
|
126
|
+
|
|
127
|
+
For detailed help on a topic:
|
|
128
|
+
sdk.help('features') - Feature collection methods
|
|
129
|
+
sdk.help('analytics') - Analytics methods
|
|
130
|
+
sdk.help('sessions') - Session management
|
|
131
|
+
sdk.help('orchestration') - Subagent orchestration
|
|
132
|
+
sdk.help('planning') - Planning workflow
|
|
133
|
+
sdk.help('operations') - Server, hooks, events operations
|
|
134
|
+
"""
|
|
135
|
+
|
|
136
|
+
def __dir__(self) -> list[str]:
|
|
137
|
+
"""Return attributes with most useful ones first for discoverability."""
|
|
138
|
+
priority = [
|
|
139
|
+
# Work item managers
|
|
140
|
+
"features",
|
|
141
|
+
"bugs",
|
|
142
|
+
"spikes",
|
|
143
|
+
"chores",
|
|
144
|
+
"epics",
|
|
145
|
+
"phases",
|
|
146
|
+
# Non-work collections
|
|
147
|
+
"tracks",
|
|
148
|
+
"sessions",
|
|
149
|
+
"agents",
|
|
150
|
+
# Learning collections
|
|
151
|
+
"patterns",
|
|
152
|
+
"insights",
|
|
153
|
+
"metrics",
|
|
154
|
+
# Orchestration
|
|
155
|
+
"spawn_explorer",
|
|
156
|
+
"spawn_coder",
|
|
157
|
+
"orchestrate",
|
|
158
|
+
# Session management
|
|
159
|
+
"get_session_start_info",
|
|
160
|
+
"start_session",
|
|
161
|
+
"end_session",
|
|
162
|
+
# Strategic analytics
|
|
163
|
+
"find_bottlenecks",
|
|
164
|
+
"recommend_next_work",
|
|
165
|
+
"get_parallel_work",
|
|
166
|
+
# Work queue
|
|
167
|
+
"get_work_queue",
|
|
168
|
+
"work_next",
|
|
169
|
+
# Operations
|
|
170
|
+
"start_server",
|
|
171
|
+
"install_hooks",
|
|
172
|
+
"export_sessions",
|
|
173
|
+
"analyze_project",
|
|
174
|
+
# Help
|
|
175
|
+
"help",
|
|
176
|
+
]
|
|
177
|
+
# Get all attributes
|
|
178
|
+
all_attrs = object.__dir__(self)
|
|
179
|
+
# Separate into priority, regular, and dunder attributes
|
|
180
|
+
regular = [a for a in all_attrs if not a.startswith("_") and a not in priority]
|
|
181
|
+
dunder = [a for a in all_attrs if a.startswith("_")]
|
|
182
|
+
# Return priority items first, then regular, then dunder
|
|
183
|
+
return priority + regular + dunder
|
|
184
|
+
|
|
185
|
+
def _help_topic(self, topic: str) -> str:
|
|
186
|
+
"""Return specific help for topic."""
|
|
187
|
+
topic = topic.lower()
|
|
188
|
+
|
|
189
|
+
if topic in ["feature", "features"]:
|
|
190
|
+
return """FEATURES COLLECTION
|
|
191
|
+
|
|
192
|
+
Create and manage feature work items with builder support.
|
|
193
|
+
|
|
194
|
+
COMMON METHODS:
|
|
195
|
+
sdk.features.create(title) - Create new feature (returns builder)
|
|
196
|
+
sdk.features.get(id) - Get feature by ID
|
|
197
|
+
sdk.features.all() - Get all features
|
|
198
|
+
sdk.features.where(**filters) - Query features
|
|
199
|
+
sdk.features.edit(id) - Edit feature (context manager)
|
|
200
|
+
sdk.features.mark_done(ids) - Mark features as done
|
|
201
|
+
sdk.features.assign(ids, agent) - Assign features to agent
|
|
202
|
+
|
|
203
|
+
BUILDER PATTERN:
|
|
204
|
+
feature = (sdk.features.create("User Auth")
|
|
205
|
+
.set_priority("high")
|
|
206
|
+
.add_steps(["Login", "Logout", "Reset password"])
|
|
207
|
+
.add_edge("blocked_by", "feat-database")
|
|
208
|
+
.save())
|
|
209
|
+
|
|
210
|
+
QUERIES:
|
|
211
|
+
high_priority = sdk.features.where(status="todo", priority="high")
|
|
212
|
+
my_features = sdk.features.where(agent_assigned="claude")
|
|
213
|
+
blocked = sdk.features.where(status="blocked")
|
|
214
|
+
|
|
215
|
+
CONTEXT MANAGER:
|
|
216
|
+
with sdk.features.edit("feat-001") as f:
|
|
217
|
+
f.status = "in-progress"
|
|
218
|
+
f.complete_step(0)
|
|
219
|
+
# Auto-saves on exit
|
|
220
|
+
|
|
221
|
+
BATCH OPERATIONS:
|
|
222
|
+
result = sdk.features.mark_done(["feat-001", "feat-002"])
|
|
223
|
+
logger.info(f"Completed {result['success_count']} features")
|
|
224
|
+
if result['failed_ids']:
|
|
225
|
+
logger.info(f"Failed: {result['failed_ids']}")
|
|
226
|
+
|
|
227
|
+
COMMON MISTAKES:
|
|
228
|
+
sdk.features.mark_complete([ids]) -> sdk.features.mark_done([ids])
|
|
229
|
+
sdk.feature.create(...) -> sdk.features.create(...)
|
|
230
|
+
claim(id, agent_id=...) -> claim(id, agent=...)
|
|
231
|
+
builder.status = "done" -> builder.save(); then edit()
|
|
232
|
+
|
|
233
|
+
See also: sdk.help('bugs'), sdk.help('spikes'), sdk.help('chores')
|
|
234
|
+
"""
|
|
235
|
+
|
|
236
|
+
elif topic in ["bug", "bugs"]:
|
|
237
|
+
return """BUGS COLLECTION
|
|
238
|
+
|
|
239
|
+
Create and manage bug reports.
|
|
240
|
+
|
|
241
|
+
COMMON METHODS:
|
|
242
|
+
sdk.bugs.create(title) - Create new bug (returns builder)
|
|
243
|
+
sdk.bugs.get(id) - Get bug by ID
|
|
244
|
+
sdk.bugs.all() - Get all bugs
|
|
245
|
+
sdk.bugs.where(**filters) - Query bugs
|
|
246
|
+
sdk.bugs.edit(id) - Edit bug (context manager)
|
|
247
|
+
|
|
248
|
+
BUILDER PATTERN:
|
|
249
|
+
bug = (sdk.bugs.create("Login fails on Safari")
|
|
250
|
+
.set_priority("critical")
|
|
251
|
+
.add_steps(["Reproduce", "Fix", "Test"])
|
|
252
|
+
.save())
|
|
253
|
+
|
|
254
|
+
QUERIES:
|
|
255
|
+
critical = sdk.bugs.where(priority="critical", status="todo")
|
|
256
|
+
my_bugs = sdk.bugs.where(agent_assigned="claude")
|
|
257
|
+
|
|
258
|
+
See also: sdk.help('features'), sdk.help('spikes')
|
|
259
|
+
"""
|
|
260
|
+
|
|
261
|
+
elif topic in ["spike", "spikes"]:
|
|
262
|
+
return """SPIKES COLLECTION
|
|
263
|
+
|
|
264
|
+
Create and manage investigation/research spikes.
|
|
265
|
+
|
|
266
|
+
COMMON METHODS:
|
|
267
|
+
sdk.spikes.create(title) - Create new spike (returns builder)
|
|
268
|
+
sdk.spikes.get(id) - Get spike by ID
|
|
269
|
+
sdk.spikes.all() - Get all spikes
|
|
270
|
+
sdk.spikes.where(**filters) - Query spikes
|
|
271
|
+
|
|
272
|
+
BUILDER PATTERN:
|
|
273
|
+
spike = (sdk.spikes.create("Research OAuth providers")
|
|
274
|
+
.set_priority("high")
|
|
275
|
+
.add_steps(["Research", "Document findings"])
|
|
276
|
+
.save())
|
|
277
|
+
|
|
278
|
+
PLANNING SPIKES:
|
|
279
|
+
spike = sdk.start_planning_spike(
|
|
280
|
+
"Plan User Auth",
|
|
281
|
+
context="Users need login",
|
|
282
|
+
timebox_hours=4.0
|
|
283
|
+
)
|
|
284
|
+
|
|
285
|
+
See also: sdk.help('planning'), sdk.help('features')
|
|
286
|
+
"""
|
|
287
|
+
|
|
288
|
+
elif topic in ["chore", "chores"]:
|
|
289
|
+
return """CHORES COLLECTION
|
|
290
|
+
|
|
291
|
+
Create and manage maintenance and chore tasks.
|
|
292
|
+
|
|
293
|
+
COMMON METHODS:
|
|
294
|
+
sdk.chores.create(title) - Create new chore (returns builder)
|
|
295
|
+
sdk.chores.get(id) - Get chore by ID
|
|
296
|
+
sdk.chores.all() - Get all chores
|
|
297
|
+
sdk.chores.where(**filters) - Query chores
|
|
298
|
+
|
|
299
|
+
BUILDER PATTERN:
|
|
300
|
+
chore = (sdk.chores.create("Update dependencies")
|
|
301
|
+
.set_priority("medium")
|
|
302
|
+
.add_steps(["Run uv update", "Test", "Commit"])
|
|
303
|
+
.save())
|
|
304
|
+
|
|
305
|
+
See also: sdk.help('features'), sdk.help('bugs')
|
|
306
|
+
"""
|
|
307
|
+
|
|
308
|
+
elif topic in ["epic", "epics"]:
|
|
309
|
+
return """EPICS COLLECTION
|
|
310
|
+
|
|
311
|
+
Create and manage large bodies of work.
|
|
312
|
+
|
|
313
|
+
COMMON METHODS:
|
|
314
|
+
sdk.epics.create(title) - Create new epic (returns builder)
|
|
315
|
+
sdk.epics.get(id) - Get epic by ID
|
|
316
|
+
sdk.epics.all() - Get all epics
|
|
317
|
+
sdk.epics.where(**filters) - Query epics
|
|
318
|
+
|
|
319
|
+
BUILDER PATTERN:
|
|
320
|
+
epic = (sdk.epics.create("Authentication System")
|
|
321
|
+
.set_priority("critical")
|
|
322
|
+
.add_steps(["Design", "Implement", "Test", "Deploy"])
|
|
323
|
+
.save())
|
|
324
|
+
|
|
325
|
+
See also: sdk.help('features'), sdk.help('tracks')
|
|
326
|
+
"""
|
|
327
|
+
|
|
328
|
+
elif topic in ["track", "tracks"]:
|
|
329
|
+
return """TRACKS COLLECTION
|
|
330
|
+
|
|
331
|
+
Create and manage work tracks with builder support.
|
|
332
|
+
|
|
333
|
+
COMMON METHODS:
|
|
334
|
+
sdk.tracks.create(title) - Create new track (returns builder)
|
|
335
|
+
sdk.tracks.builder() - Get track builder
|
|
336
|
+
sdk.tracks.get(id) - Get track by ID
|
|
337
|
+
sdk.tracks.all() - Get all tracks
|
|
338
|
+
sdk.tracks.where(**filters) - Query tracks
|
|
339
|
+
|
|
340
|
+
BUILDER PATTERN:
|
|
341
|
+
track = (sdk.tracks.builder()
|
|
342
|
+
.title("User Authentication")
|
|
343
|
+
.description("OAuth 2.0 system")
|
|
344
|
+
.priority("high")
|
|
345
|
+
.with_spec(
|
|
346
|
+
overview="OAuth integration",
|
|
347
|
+
requirements=[("OAuth 2.0", "must-have")],
|
|
348
|
+
acceptance_criteria=["Login works"]
|
|
349
|
+
)
|
|
350
|
+
.with_plan_phases([
|
|
351
|
+
("Phase 1", ["Setup (2h)", "Config (1h)"]),
|
|
352
|
+
("Phase 2", ["Testing (2h)"])
|
|
353
|
+
])
|
|
354
|
+
.create())
|
|
355
|
+
|
|
356
|
+
FROM PLANNING:
|
|
357
|
+
track_info = sdk.create_track_from_plan(
|
|
358
|
+
title="User Auth",
|
|
359
|
+
description="OAuth system",
|
|
360
|
+
requirements=[("OAuth", "must-have")],
|
|
361
|
+
phases=[("Phase 1", ["Setup", "Config"])]
|
|
362
|
+
)
|
|
363
|
+
|
|
364
|
+
See also: sdk.help('planning'), sdk.help('features')
|
|
365
|
+
"""
|
|
366
|
+
|
|
367
|
+
elif topic in ["session", "sessions"]:
|
|
368
|
+
return """SESSION MANAGEMENT
|
|
369
|
+
|
|
370
|
+
Create and manage agent sessions.
|
|
371
|
+
|
|
372
|
+
SESSION METHODS:
|
|
373
|
+
sdk.start_session(title=...) - Start new session
|
|
374
|
+
sdk.end_session(id) - End session
|
|
375
|
+
sdk.track_activity(...) - Track activity in session
|
|
376
|
+
sdk.dedupe_sessions(...) - Clean up low-signal sessions
|
|
377
|
+
sdk.get_status() - Get project status
|
|
378
|
+
|
|
379
|
+
SESSION COLLECTION:
|
|
380
|
+
sdk.sessions.get(id) - Get session by ID
|
|
381
|
+
sdk.sessions.all() - Get all sessions
|
|
382
|
+
sdk.sessions.where(**filters) - Query sessions
|
|
383
|
+
|
|
384
|
+
TYPICAL WORKFLOW:
|
|
385
|
+
# Session start hook handles this automatically
|
|
386
|
+
session = sdk.start_session(title="Fix login bug")
|
|
387
|
+
|
|
388
|
+
# Track activities (handled by hooks)
|
|
389
|
+
sdk.track_activity(
|
|
390
|
+
tool="Edit",
|
|
391
|
+
summary="Fixed auth logic",
|
|
392
|
+
file_paths=["src/auth.py"],
|
|
393
|
+
success=True
|
|
394
|
+
)
|
|
395
|
+
|
|
396
|
+
# End session
|
|
397
|
+
sdk.end_session(
|
|
398
|
+
session.id,
|
|
399
|
+
handoff_notes="Login bug fixed, needs testing"
|
|
400
|
+
)
|
|
401
|
+
|
|
402
|
+
CLEANUP:
|
|
403
|
+
# Remove orphaned sessions (<=1 event)
|
|
404
|
+
result = sdk.dedupe_sessions(max_events=1, dry_run=False)
|
|
405
|
+
|
|
406
|
+
See also: sdk.help('analytics')
|
|
407
|
+
"""
|
|
408
|
+
|
|
409
|
+
elif topic in ["analytic", "analytics", "strategic"]:
|
|
410
|
+
return """STRATEGIC ANALYTICS
|
|
411
|
+
|
|
412
|
+
Find bottlenecks, recommend work, and assess risks.
|
|
413
|
+
|
|
414
|
+
DEPENDENCY ANALYTICS:
|
|
415
|
+
bottlenecks = sdk.find_bottlenecks(top_n=5)
|
|
416
|
+
# Returns tasks blocking the most work
|
|
417
|
+
|
|
418
|
+
parallel = sdk.get_parallel_work(max_agents=5)
|
|
419
|
+
# Returns tasks that can run simultaneously
|
|
420
|
+
|
|
421
|
+
recs = sdk.recommend_next_work(agent_count=3)
|
|
422
|
+
# Returns smart recommendations with scoring
|
|
423
|
+
|
|
424
|
+
risks = sdk.assess_risks()
|
|
425
|
+
# Returns high-risk tasks and circular deps
|
|
426
|
+
|
|
427
|
+
impact = sdk.analyze_impact("feat-001")
|
|
428
|
+
# Returns what unlocks if you complete this task
|
|
429
|
+
|
|
430
|
+
DIRECT ACCESS (preferred):
|
|
431
|
+
sdk.dep_analytics.find_bottlenecks(top_n=5)
|
|
432
|
+
sdk.dep_analytics.recommend_next_tasks(agent_count=3)
|
|
433
|
+
sdk.dep_analytics.find_parallelizable_work(status="todo")
|
|
434
|
+
sdk.dep_analytics.assess_dependency_risk()
|
|
435
|
+
sdk.dep_analytics.impact_analysis("feat-001")
|
|
436
|
+
|
|
437
|
+
WORK TYPE ANALYTICS:
|
|
438
|
+
sdk.analytics.get_wip_by_type()
|
|
439
|
+
sdk.analytics.get_completion_rates()
|
|
440
|
+
sdk.analytics.get_agent_workload()
|
|
441
|
+
|
|
442
|
+
CONTEXT ANALYTICS:
|
|
443
|
+
sdk.context.track_usage(...)
|
|
444
|
+
sdk.context.get_usage_report()
|
|
445
|
+
|
|
446
|
+
See also: sdk.help('planning'), sdk.help('work_queue')
|
|
447
|
+
"""
|
|
448
|
+
|
|
449
|
+
elif topic in ["queue", "work_queue", "routing"]:
|
|
450
|
+
return """WORK QUEUE & ROUTING
|
|
451
|
+
|
|
452
|
+
Get prioritized work using smart routing.
|
|
453
|
+
|
|
454
|
+
WORK QUEUE:
|
|
455
|
+
queue = sdk.get_work_queue(limit=10, min_score=0.0)
|
|
456
|
+
# Returns prioritized list with scores
|
|
457
|
+
|
|
458
|
+
for item in queue:
|
|
459
|
+
logger.info(f"{item['score']:.1f} - {item['title']}")
|
|
460
|
+
if item.get('blocked_by'):
|
|
461
|
+
logger.info(f" Blocked by: {item['blocked_by']}")
|
|
462
|
+
|
|
463
|
+
SMART ROUTING:
|
|
464
|
+
task = sdk.work_next(auto_claim=True, min_score=0.5)
|
|
465
|
+
# Returns next best task using analytics + capabilities
|
|
466
|
+
|
|
467
|
+
if task:
|
|
468
|
+
logger.info(f"Working on: {task.title}")
|
|
469
|
+
# Task is auto-claimed and assigned
|
|
470
|
+
|
|
471
|
+
SIMPLE NEXT TASK:
|
|
472
|
+
task = sdk.next_task(priority="high", auto_claim=True)
|
|
473
|
+
# Simpler version without smart routing
|
|
474
|
+
|
|
475
|
+
See also: sdk.help('analytics')
|
|
476
|
+
"""
|
|
477
|
+
|
|
478
|
+
elif topic in ["plan", "planning", "workflow"]:
|
|
479
|
+
return """PLANNING WORKFLOW
|
|
480
|
+
|
|
481
|
+
Research, plan, and create tracks for new work.
|
|
482
|
+
|
|
483
|
+
SMART PLANNING:
|
|
484
|
+
plan = sdk.smart_plan(
|
|
485
|
+
"User authentication system",
|
|
486
|
+
create_spike=True,
|
|
487
|
+
timebox_hours=4.0,
|
|
488
|
+
research_completed=True, # IMPORTANT: Do research first!
|
|
489
|
+
research_findings={
|
|
490
|
+
"topic": "OAuth 2.0 best practices",
|
|
491
|
+
"recommended_library": "authlib",
|
|
492
|
+
"key_insights": ["Use PKCE", "Token rotation"]
|
|
493
|
+
}
|
|
494
|
+
)
|
|
495
|
+
|
|
496
|
+
PLANNING SPIKE:
|
|
497
|
+
spike = sdk.start_planning_spike(
|
|
498
|
+
"Plan Real-time Notifications",
|
|
499
|
+
context="Users need live updates",
|
|
500
|
+
timebox_hours=3.0
|
|
501
|
+
)
|
|
502
|
+
|
|
503
|
+
CREATE TRACK FROM PLAN:
|
|
504
|
+
track_info = sdk.create_track_from_plan(
|
|
505
|
+
title="User Authentication",
|
|
506
|
+
description="OAuth 2.0 with JWT",
|
|
507
|
+
requirements=[
|
|
508
|
+
("OAuth 2.0 integration", "must-have"),
|
|
509
|
+
("JWT token management", "must-have")
|
|
510
|
+
],
|
|
511
|
+
phases=[
|
|
512
|
+
("Phase 1: OAuth", ["Setup (2h)", "Callback (2h)"]),
|
|
513
|
+
("Phase 2: JWT", ["Token signing (2h)"])
|
|
514
|
+
]
|
|
515
|
+
)
|
|
516
|
+
|
|
517
|
+
PARALLEL PLANNING:
|
|
518
|
+
plan = sdk.plan_parallel_work(max_agents=3)
|
|
519
|
+
if plan["can_parallelize"]:
|
|
520
|
+
for p in plan["prompts"]:
|
|
521
|
+
Task(prompt=p["prompt"])
|
|
522
|
+
|
|
523
|
+
# After parallel work completes
|
|
524
|
+
results = sdk.aggregate_parallel_results([
|
|
525
|
+
"agent-1", "agent-2", "agent-3"
|
|
526
|
+
])
|
|
527
|
+
|
|
528
|
+
See also: sdk.help('tracks'), sdk.help('spikes')
|
|
529
|
+
"""
|
|
530
|
+
|
|
531
|
+
elif topic in ["orchestration", "orchestrate", "subagent", "subagents"]:
|
|
532
|
+
return """SUBAGENT ORCHESTRATION
|
|
533
|
+
|
|
534
|
+
Spawn explorer and coder subagents for complex work.
|
|
535
|
+
|
|
536
|
+
EXPLORER (Discovery):
|
|
537
|
+
prompt = sdk.spawn_explorer(
|
|
538
|
+
task="Find all API endpoints",
|
|
539
|
+
scope="src/api/",
|
|
540
|
+
patterns=["*.py"],
|
|
541
|
+
questions=["What framework is used?"]
|
|
542
|
+
)
|
|
543
|
+
# Execute with Task tool
|
|
544
|
+
Task(prompt=prompt["prompt"], description=prompt["description"])
|
|
545
|
+
|
|
546
|
+
CODER (Implementation):
|
|
547
|
+
prompt = sdk.spawn_coder(
|
|
548
|
+
feature_id="feat-add-auth",
|
|
549
|
+
context=explorer_results,
|
|
550
|
+
files_to_modify=["src/auth.py"],
|
|
551
|
+
test_command="uv run pytest tests/auth/"
|
|
552
|
+
)
|
|
553
|
+
Task(prompt=prompt["prompt"], description=prompt["description"])
|
|
554
|
+
|
|
555
|
+
FULL ORCHESTRATION:
|
|
556
|
+
prompts = sdk.orchestrate(
|
|
557
|
+
"feat-add-caching",
|
|
558
|
+
exploration_scope="src/cache/",
|
|
559
|
+
test_command="uv run pytest tests/cache/"
|
|
560
|
+
)
|
|
561
|
+
|
|
562
|
+
# Phase 1: Explorer
|
|
563
|
+
Task(prompt=prompts["explorer"]["prompt"])
|
|
564
|
+
|
|
565
|
+
# Phase 2: Coder (with explorer results)
|
|
566
|
+
Task(prompt=prompts["coder"]["prompt"])
|
|
567
|
+
|
|
568
|
+
WORKFLOW:
|
|
569
|
+
1. Explorer discovers code patterns and files
|
|
570
|
+
2. Coder implements changes using explorer findings
|
|
571
|
+
3. Both agents auto-track in sessions
|
|
572
|
+
4. Feature gets updated with progress
|
|
573
|
+
|
|
574
|
+
See also: sdk.help('planning')
|
|
575
|
+
"""
|
|
576
|
+
|
|
577
|
+
elif topic in ["optimization", "session_start", "active_work"]:
|
|
578
|
+
return """SESSION OPTIMIZATION
|
|
579
|
+
|
|
580
|
+
Reduce context usage with optimized methods.
|
|
581
|
+
|
|
582
|
+
SESSION START INFO:
|
|
583
|
+
info = sdk.get_session_start_info(
|
|
584
|
+
include_git_log=True,
|
|
585
|
+
git_log_count=5,
|
|
586
|
+
analytics_top_n=3
|
|
587
|
+
)
|
|
588
|
+
|
|
589
|
+
# Single call returns:
|
|
590
|
+
# - status: Project status
|
|
591
|
+
# - active_work: Current work item
|
|
592
|
+
# - features: All features
|
|
593
|
+
# - sessions: Recent sessions
|
|
594
|
+
# - git_log: Recent commits
|
|
595
|
+
# - analytics: Bottlenecks, recommendations, parallel
|
|
596
|
+
|
|
597
|
+
ACTIVE WORK ITEM:
|
|
598
|
+
active = sdk.get_active_work_item()
|
|
599
|
+
if active:
|
|
600
|
+
logger.info(f"Working on: {active['title']}")
|
|
601
|
+
logger.info(f"Progress: {active['steps_completed']}/{active['steps_total']}")
|
|
602
|
+
|
|
603
|
+
# Filter by agent
|
|
604
|
+
active = sdk.get_active_work_item(filter_by_agent=True)
|
|
605
|
+
|
|
606
|
+
BENEFITS:
|
|
607
|
+
- 6+ tool calls -> 1 method call
|
|
608
|
+
- Reduced token usage
|
|
609
|
+
- Faster session initialization
|
|
610
|
+
- All context in one place
|
|
611
|
+
|
|
612
|
+
See also: sdk.help('sessions')
|
|
613
|
+
"""
|
|
614
|
+
|
|
615
|
+
elif topic in ["operation", "operations", "server", "hooks", "events"]:
|
|
616
|
+
return """OPERATIONS - Server, Hooks, Events
|
|
617
|
+
|
|
618
|
+
Infrastructure operations for running HtmlGraph.
|
|
619
|
+
|
|
620
|
+
SERVER OPERATIONS:
|
|
621
|
+
# Start server for web UI
|
|
622
|
+
result = sdk.start_server(port=8080, watch=True)
|
|
623
|
+
logger.info(f"Server at {result.handle.url}")
|
|
624
|
+
|
|
625
|
+
# Stop server
|
|
626
|
+
sdk.stop_server(result.handle)
|
|
627
|
+
|
|
628
|
+
# Check status
|
|
629
|
+
status = sdk.get_server_status(result.handle)
|
|
630
|
+
|
|
631
|
+
HOOK OPERATIONS:
|
|
632
|
+
# Install Git hooks for automatic tracking
|
|
633
|
+
result = sdk.install_hooks()
|
|
634
|
+
logger.info(f"Installed: {result.installed}")
|
|
635
|
+
|
|
636
|
+
# List hook status
|
|
637
|
+
result = sdk.list_hooks()
|
|
638
|
+
logger.info(f"Enabled: {result.enabled}")
|
|
639
|
+
logger.info(f"Missing: {result.missing}")
|
|
640
|
+
|
|
641
|
+
# Validate configuration
|
|
642
|
+
result = sdk.validate_hook_config()
|
|
643
|
+
if not result.valid:
|
|
644
|
+
logger.info(f"Errors: {result.errors}")
|
|
645
|
+
|
|
646
|
+
EVENT OPERATIONS:
|
|
647
|
+
# Export HTML sessions to JSONL
|
|
648
|
+
result = sdk.export_sessions()
|
|
649
|
+
logger.info(f"Exported {result.written} sessions")
|
|
650
|
+
|
|
651
|
+
# Rebuild SQLite index
|
|
652
|
+
result = sdk.rebuild_event_index()
|
|
653
|
+
logger.info(f"Inserted {result.inserted} events")
|
|
654
|
+
|
|
655
|
+
# Query events
|
|
656
|
+
result = sdk.query_events(
|
|
657
|
+
session_id="sess-123",
|
|
658
|
+
tool="Bash",
|
|
659
|
+
limit=10
|
|
660
|
+
)
|
|
661
|
+
for event in result.events:
|
|
662
|
+
logger.info(f"{event['timestamp']}: {event['summary']}")
|
|
663
|
+
|
|
664
|
+
# Get statistics
|
|
665
|
+
stats = sdk.get_event_stats()
|
|
666
|
+
logger.info(f"Total events: {stats.total_events}")
|
|
667
|
+
|
|
668
|
+
ANALYTICS OPERATIONS:
|
|
669
|
+
# Analyze session
|
|
670
|
+
result = sdk.analyze_session("sess-123")
|
|
671
|
+
logger.info(f"Primary work: {result.metrics['primary_work_type']}")
|
|
672
|
+
|
|
673
|
+
# Analyze project
|
|
674
|
+
result = sdk.analyze_project()
|
|
675
|
+
logger.info(f"Total sessions: {result.metrics['total_sessions']}")
|
|
676
|
+
logger.info(f"Work distribution: {result.metrics['work_distribution']}")
|
|
677
|
+
|
|
678
|
+
# Get recommendations
|
|
679
|
+
result = sdk.get_work_recommendations()
|
|
680
|
+
for rec in result.recommendations:
|
|
681
|
+
logger.info(f"{rec['title']} (score: {rec['score']})")
|
|
682
|
+
|
|
683
|
+
See also: sdk.help('analytics'), sdk.help('sessions')
|
|
684
|
+
"""
|
|
685
|
+
|
|
686
|
+
else:
|
|
687
|
+
return f"""Unknown topic: '{topic}'
|
|
688
|
+
|
|
689
|
+
Available topics:
|
|
690
|
+
- features, bugs, spikes, chores, epics (work collections)
|
|
691
|
+
- tracks, sessions, agents (non-work collections)
|
|
692
|
+
- analytics, strategic (dependency and work analytics)
|
|
693
|
+
- work_queue, routing (smart task routing)
|
|
694
|
+
- planning, workflow (planning and track creation)
|
|
695
|
+
- orchestration, subagents (explorer/coder spawning)
|
|
696
|
+
- optimization, session_start (context optimization)
|
|
697
|
+
|
|
698
|
+
Try: sdk.help() for full overview
|
|
699
|
+
"""
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Core mixins module for SDK - essential methods and utilities.
|
|
3
|
+
|
|
4
|
+
Provides:
|
|
5
|
+
- CoreMixin: Database, refs, export, and utility methods
|
|
6
|
+
- TaskAttributionMixin: Task attribution for subagent tracking
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from htmlgraph.sdk.mixins.attribution import TaskAttributionMixin
|
|
10
|
+
from htmlgraph.sdk.mixins.mixin import CoreMixin
|
|
11
|
+
|
|
12
|
+
__all__ = [
|
|
13
|
+
"CoreMixin",
|
|
14
|
+
"TaskAttributionMixin",
|
|
15
|
+
]
|