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.
Files changed (331) hide show
  1. htmlgraph/.htmlgraph/.session-warning-state.json +6 -0
  2. htmlgraph/.htmlgraph/agents.json +72 -0
  3. htmlgraph/.htmlgraph/htmlgraph.db +0 -0
  4. htmlgraph/__init__.py +173 -17
  5. htmlgraph/__init__.pyi +123 -0
  6. htmlgraph/agent_detection.py +127 -0
  7. htmlgraph/agent_registry.py +45 -30
  8. htmlgraph/agents.py +160 -107
  9. htmlgraph/analytics/__init__.py +9 -2
  10. htmlgraph/analytics/cli.py +190 -51
  11. htmlgraph/analytics/cost_analyzer.py +391 -0
  12. htmlgraph/analytics/cost_monitor.py +664 -0
  13. htmlgraph/analytics/cost_reporter.py +675 -0
  14. htmlgraph/analytics/cross_session.py +617 -0
  15. htmlgraph/analytics/dependency.py +192 -100
  16. htmlgraph/analytics/pattern_learning.py +771 -0
  17. htmlgraph/analytics/session_graph.py +707 -0
  18. htmlgraph/analytics/strategic/__init__.py +80 -0
  19. htmlgraph/analytics/strategic/cost_optimizer.py +611 -0
  20. htmlgraph/analytics/strategic/pattern_detector.py +876 -0
  21. htmlgraph/analytics/strategic/preference_manager.py +709 -0
  22. htmlgraph/analytics/strategic/suggestion_engine.py +747 -0
  23. htmlgraph/analytics/work_type.py +190 -14
  24. htmlgraph/analytics_index.py +135 -51
  25. htmlgraph/api/__init__.py +3 -0
  26. htmlgraph/api/cost_alerts_websocket.py +416 -0
  27. htmlgraph/api/main.py +2498 -0
  28. htmlgraph/api/static/htmx.min.js +1 -0
  29. htmlgraph/api/static/style-redesign.css +1344 -0
  30. htmlgraph/api/static/style.css +1079 -0
  31. htmlgraph/api/templates/dashboard-redesign.html +1366 -0
  32. htmlgraph/api/templates/dashboard.html +794 -0
  33. htmlgraph/api/templates/partials/activity-feed-hierarchical.html +326 -0
  34. htmlgraph/api/templates/partials/activity-feed.html +1100 -0
  35. htmlgraph/api/templates/partials/agents-redesign.html +317 -0
  36. htmlgraph/api/templates/partials/agents.html +317 -0
  37. htmlgraph/api/templates/partials/event-traces.html +373 -0
  38. htmlgraph/api/templates/partials/features-kanban-redesign.html +509 -0
  39. htmlgraph/api/templates/partials/features.html +578 -0
  40. htmlgraph/api/templates/partials/metrics-redesign.html +346 -0
  41. htmlgraph/api/templates/partials/metrics.html +346 -0
  42. htmlgraph/api/templates/partials/orchestration-redesign.html +443 -0
  43. htmlgraph/api/templates/partials/orchestration.html +198 -0
  44. htmlgraph/api/templates/partials/spawners.html +375 -0
  45. htmlgraph/api/templates/partials/work-items.html +613 -0
  46. htmlgraph/api/websocket.py +538 -0
  47. htmlgraph/archive/__init__.py +24 -0
  48. htmlgraph/archive/bloom.py +234 -0
  49. htmlgraph/archive/fts.py +297 -0
  50. htmlgraph/archive/manager.py +583 -0
  51. htmlgraph/archive/search.py +244 -0
  52. htmlgraph/atomic_ops.py +560 -0
  53. htmlgraph/attribute_index.py +208 -0
  54. htmlgraph/bounded_paths.py +539 -0
  55. htmlgraph/builders/__init__.py +14 -0
  56. htmlgraph/builders/base.py +118 -29
  57. htmlgraph/builders/bug.py +150 -0
  58. htmlgraph/builders/chore.py +119 -0
  59. htmlgraph/builders/epic.py +150 -0
  60. htmlgraph/builders/feature.py +31 -6
  61. htmlgraph/builders/insight.py +195 -0
  62. htmlgraph/builders/metric.py +217 -0
  63. htmlgraph/builders/pattern.py +202 -0
  64. htmlgraph/builders/phase.py +162 -0
  65. htmlgraph/builders/spike.py +52 -19
  66. htmlgraph/builders/track.py +148 -72
  67. htmlgraph/cigs/__init__.py +81 -0
  68. htmlgraph/cigs/autonomy.py +385 -0
  69. htmlgraph/cigs/cost.py +475 -0
  70. htmlgraph/cigs/messages_basic.py +472 -0
  71. htmlgraph/cigs/messaging.py +365 -0
  72. htmlgraph/cigs/models.py +771 -0
  73. htmlgraph/cigs/pattern_storage.py +427 -0
  74. htmlgraph/cigs/patterns.py +503 -0
  75. htmlgraph/cigs/posttool_analyzer.py +234 -0
  76. htmlgraph/cigs/reporter.py +818 -0
  77. htmlgraph/cigs/tracker.py +317 -0
  78. htmlgraph/cli/.htmlgraph/.session-warning-state.json +6 -0
  79. htmlgraph/cli/.htmlgraph/agents.json +72 -0
  80. htmlgraph/cli/.htmlgraph/htmlgraph.db +0 -0
  81. htmlgraph/cli/__init__.py +42 -0
  82. htmlgraph/cli/__main__.py +6 -0
  83. htmlgraph/cli/analytics.py +1424 -0
  84. htmlgraph/cli/base.py +685 -0
  85. htmlgraph/cli/constants.py +206 -0
  86. htmlgraph/cli/core.py +954 -0
  87. htmlgraph/cli/main.py +147 -0
  88. htmlgraph/cli/models.py +475 -0
  89. htmlgraph/cli/templates/__init__.py +1 -0
  90. htmlgraph/cli/templates/cost_dashboard.py +399 -0
  91. htmlgraph/cli/work/__init__.py +239 -0
  92. htmlgraph/cli/work/browse.py +115 -0
  93. htmlgraph/cli/work/features.py +568 -0
  94. htmlgraph/cli/work/orchestration.py +676 -0
  95. htmlgraph/cli/work/report.py +728 -0
  96. htmlgraph/cli/work/sessions.py +466 -0
  97. htmlgraph/cli/work/snapshot.py +559 -0
  98. htmlgraph/cli/work/tracks.py +486 -0
  99. htmlgraph/cli_commands/__init__.py +1 -0
  100. htmlgraph/cli_commands/feature.py +195 -0
  101. htmlgraph/cli_framework.py +115 -0
  102. htmlgraph/collections/__init__.py +18 -0
  103. htmlgraph/collections/base.py +415 -98
  104. htmlgraph/collections/bug.py +53 -0
  105. htmlgraph/collections/chore.py +53 -0
  106. htmlgraph/collections/epic.py +53 -0
  107. htmlgraph/collections/feature.py +12 -26
  108. htmlgraph/collections/insight.py +100 -0
  109. htmlgraph/collections/metric.py +92 -0
  110. htmlgraph/collections/pattern.py +97 -0
  111. htmlgraph/collections/phase.py +53 -0
  112. htmlgraph/collections/session.py +194 -0
  113. htmlgraph/collections/spike.py +56 -16
  114. htmlgraph/collections/task_delegation.py +241 -0
  115. htmlgraph/collections/todo.py +511 -0
  116. htmlgraph/collections/traces.py +487 -0
  117. htmlgraph/config/cost_models.json +56 -0
  118. htmlgraph/config.py +190 -0
  119. htmlgraph/context_analytics.py +344 -0
  120. htmlgraph/converter.py +216 -28
  121. htmlgraph/cost_analysis/__init__.py +5 -0
  122. htmlgraph/cost_analysis/analyzer.py +438 -0
  123. htmlgraph/dashboard.html +2406 -307
  124. htmlgraph/dashboard.html.backup +6592 -0
  125. htmlgraph/dashboard.html.bak +7181 -0
  126. htmlgraph/dashboard.html.bak2 +7231 -0
  127. htmlgraph/dashboard.html.bak3 +7232 -0
  128. htmlgraph/db/__init__.py +38 -0
  129. htmlgraph/db/queries.py +790 -0
  130. htmlgraph/db/schema.py +1788 -0
  131. htmlgraph/decorators.py +317 -0
  132. htmlgraph/dependency_models.py +19 -2
  133. htmlgraph/deploy.py +142 -125
  134. htmlgraph/deployment_models.py +474 -0
  135. htmlgraph/docs/API_REFERENCE.md +841 -0
  136. htmlgraph/docs/HTTP_API.md +750 -0
  137. htmlgraph/docs/INTEGRATION_GUIDE.md +752 -0
  138. htmlgraph/docs/ORCHESTRATION_PATTERNS.md +717 -0
  139. htmlgraph/docs/README.md +532 -0
  140. htmlgraph/docs/__init__.py +77 -0
  141. htmlgraph/docs/docs_version.py +55 -0
  142. htmlgraph/docs/metadata.py +93 -0
  143. htmlgraph/docs/migrations.py +232 -0
  144. htmlgraph/docs/template_engine.py +143 -0
  145. htmlgraph/docs/templates/_sections/cli_reference.md.j2 +52 -0
  146. htmlgraph/docs/templates/_sections/core_concepts.md.j2 +29 -0
  147. htmlgraph/docs/templates/_sections/sdk_basics.md.j2 +69 -0
  148. htmlgraph/docs/templates/base_agents.md.j2 +78 -0
  149. htmlgraph/docs/templates/example_user_override.md.j2 +47 -0
  150. htmlgraph/docs/version_check.py +163 -0
  151. htmlgraph/edge_index.py +182 -27
  152. htmlgraph/error_handler.py +544 -0
  153. htmlgraph/event_log.py +100 -52
  154. htmlgraph/event_migration.py +13 -4
  155. htmlgraph/exceptions.py +49 -0
  156. htmlgraph/file_watcher.py +101 -28
  157. htmlgraph/find_api.py +75 -63
  158. htmlgraph/git_events.py +145 -63
  159. htmlgraph/graph.py +1122 -106
  160. htmlgraph/hooks/.htmlgraph/.session-warning-state.json +6 -0
  161. htmlgraph/hooks/.htmlgraph/agents.json +72 -0
  162. htmlgraph/hooks/.htmlgraph/index.sqlite +0 -0
  163. htmlgraph/hooks/__init__.py +45 -0
  164. htmlgraph/hooks/bootstrap.py +169 -0
  165. htmlgraph/hooks/cigs_pretool_enforcer.py +354 -0
  166. htmlgraph/hooks/concurrent_sessions.py +208 -0
  167. htmlgraph/hooks/context.py +350 -0
  168. htmlgraph/hooks/drift_handler.py +525 -0
  169. htmlgraph/hooks/event_tracker.py +1314 -0
  170. htmlgraph/hooks/git_commands.py +175 -0
  171. htmlgraph/hooks/hooks-config.example.json +12 -0
  172. htmlgraph/hooks/installer.py +343 -0
  173. htmlgraph/hooks/orchestrator.py +674 -0
  174. htmlgraph/hooks/orchestrator_reflector.py +223 -0
  175. htmlgraph/hooks/post-checkout.sh +28 -0
  176. htmlgraph/hooks/post-commit.sh +24 -0
  177. htmlgraph/hooks/post-merge.sh +26 -0
  178. htmlgraph/hooks/post_tool_use_failure.py +273 -0
  179. htmlgraph/hooks/post_tool_use_handler.py +257 -0
  180. htmlgraph/hooks/posttooluse.py +408 -0
  181. htmlgraph/hooks/pre-commit.sh +94 -0
  182. htmlgraph/hooks/pre-push.sh +28 -0
  183. htmlgraph/hooks/pretooluse.py +819 -0
  184. htmlgraph/hooks/prompt_analyzer.py +637 -0
  185. htmlgraph/hooks/session_handler.py +668 -0
  186. htmlgraph/hooks/session_summary.py +395 -0
  187. htmlgraph/hooks/state_manager.py +504 -0
  188. htmlgraph/hooks/subagent_detection.py +202 -0
  189. htmlgraph/hooks/subagent_stop.py +369 -0
  190. htmlgraph/hooks/task_enforcer.py +255 -0
  191. htmlgraph/hooks/task_validator.py +177 -0
  192. htmlgraph/hooks/validator.py +628 -0
  193. htmlgraph/ids.py +41 -27
  194. htmlgraph/index.d.ts +286 -0
  195. htmlgraph/learning.py +767 -0
  196. htmlgraph/mcp_server.py +69 -23
  197. htmlgraph/models.py +1586 -87
  198. htmlgraph/operations/README.md +62 -0
  199. htmlgraph/operations/__init__.py +79 -0
  200. htmlgraph/operations/analytics.py +339 -0
  201. htmlgraph/operations/bootstrap.py +289 -0
  202. htmlgraph/operations/events.py +244 -0
  203. htmlgraph/operations/fastapi_server.py +231 -0
  204. htmlgraph/operations/hooks.py +350 -0
  205. htmlgraph/operations/initialization.py +597 -0
  206. htmlgraph/operations/initialization.py.backup +228 -0
  207. htmlgraph/operations/server.py +303 -0
  208. htmlgraph/orchestration/__init__.py +58 -0
  209. htmlgraph/orchestration/claude_launcher.py +179 -0
  210. htmlgraph/orchestration/command_builder.py +72 -0
  211. htmlgraph/orchestration/headless_spawner.py +281 -0
  212. htmlgraph/orchestration/live_events.py +377 -0
  213. htmlgraph/orchestration/model_selection.py +327 -0
  214. htmlgraph/orchestration/plugin_manager.py +140 -0
  215. htmlgraph/orchestration/prompts.py +137 -0
  216. htmlgraph/orchestration/spawner_event_tracker.py +383 -0
  217. htmlgraph/orchestration/spawners/__init__.py +16 -0
  218. htmlgraph/orchestration/spawners/base.py +194 -0
  219. htmlgraph/orchestration/spawners/claude.py +173 -0
  220. htmlgraph/orchestration/spawners/codex.py +435 -0
  221. htmlgraph/orchestration/spawners/copilot.py +294 -0
  222. htmlgraph/orchestration/spawners/gemini.py +471 -0
  223. htmlgraph/orchestration/subprocess_runner.py +36 -0
  224. htmlgraph/orchestration/task_coordination.py +343 -0
  225. htmlgraph/orchestration.md +563 -0
  226. htmlgraph/orchestrator-system-prompt-optimized.txt +863 -0
  227. htmlgraph/orchestrator.py +669 -0
  228. htmlgraph/orchestrator_config.py +357 -0
  229. htmlgraph/orchestrator_mode.py +328 -0
  230. htmlgraph/orchestrator_validator.py +133 -0
  231. htmlgraph/parallel.py +646 -0
  232. htmlgraph/parser.py +160 -35
  233. htmlgraph/path_query.py +608 -0
  234. htmlgraph/pattern_matcher.py +636 -0
  235. htmlgraph/planning.py +147 -52
  236. htmlgraph/pydantic_models.py +476 -0
  237. htmlgraph/quality_gates.py +350 -0
  238. htmlgraph/query_builder.py +109 -72
  239. htmlgraph/query_composer.py +509 -0
  240. htmlgraph/reflection.py +443 -0
  241. htmlgraph/refs.py +344 -0
  242. htmlgraph/repo_hash.py +512 -0
  243. htmlgraph/repositories/__init__.py +292 -0
  244. htmlgraph/repositories/analytics_repository.py +455 -0
  245. htmlgraph/repositories/analytics_repository_standard.py +628 -0
  246. htmlgraph/repositories/feature_repository.py +581 -0
  247. htmlgraph/repositories/feature_repository_htmlfile.py +668 -0
  248. htmlgraph/repositories/feature_repository_memory.py +607 -0
  249. htmlgraph/repositories/feature_repository_sqlite.py +858 -0
  250. htmlgraph/repositories/filter_service.py +620 -0
  251. htmlgraph/repositories/filter_service_standard.py +445 -0
  252. htmlgraph/repositories/shared_cache.py +621 -0
  253. htmlgraph/repositories/shared_cache_memory.py +395 -0
  254. htmlgraph/repositories/track_repository.py +552 -0
  255. htmlgraph/repositories/track_repository_htmlfile.py +619 -0
  256. htmlgraph/repositories/track_repository_memory.py +508 -0
  257. htmlgraph/repositories/track_repository_sqlite.py +711 -0
  258. htmlgraph/routing.py +8 -19
  259. htmlgraph/scripts/deploy.py +1 -2
  260. htmlgraph/sdk/__init__.py +398 -0
  261. htmlgraph/sdk/__init__.pyi +14 -0
  262. htmlgraph/sdk/analytics/__init__.py +19 -0
  263. htmlgraph/sdk/analytics/engine.py +155 -0
  264. htmlgraph/sdk/analytics/helpers.py +178 -0
  265. htmlgraph/sdk/analytics/registry.py +109 -0
  266. htmlgraph/sdk/base.py +484 -0
  267. htmlgraph/sdk/constants.py +216 -0
  268. htmlgraph/sdk/core.pyi +308 -0
  269. htmlgraph/sdk/discovery.py +120 -0
  270. htmlgraph/sdk/help/__init__.py +12 -0
  271. htmlgraph/sdk/help/mixin.py +699 -0
  272. htmlgraph/sdk/mixins/__init__.py +15 -0
  273. htmlgraph/sdk/mixins/attribution.py +113 -0
  274. htmlgraph/sdk/mixins/mixin.py +410 -0
  275. htmlgraph/sdk/operations/__init__.py +12 -0
  276. htmlgraph/sdk/operations/mixin.py +427 -0
  277. htmlgraph/sdk/orchestration/__init__.py +17 -0
  278. htmlgraph/sdk/orchestration/coordinator.py +203 -0
  279. htmlgraph/sdk/orchestration/spawner.py +204 -0
  280. htmlgraph/sdk/planning/__init__.py +19 -0
  281. htmlgraph/sdk/planning/bottlenecks.py +93 -0
  282. htmlgraph/sdk/planning/mixin.py +211 -0
  283. htmlgraph/sdk/planning/parallel.py +186 -0
  284. htmlgraph/sdk/planning/queue.py +210 -0
  285. htmlgraph/sdk/planning/recommendations.py +87 -0
  286. htmlgraph/sdk/planning/smart_planning.py +319 -0
  287. htmlgraph/sdk/session/__init__.py +19 -0
  288. htmlgraph/sdk/session/continuity.py +57 -0
  289. htmlgraph/sdk/session/handoff.py +110 -0
  290. htmlgraph/sdk/session/info.py +309 -0
  291. htmlgraph/sdk/session/manager.py +103 -0
  292. htmlgraph/sdk/strategic/__init__.py +26 -0
  293. htmlgraph/sdk/strategic/mixin.py +563 -0
  294. htmlgraph/server.py +685 -180
  295. htmlgraph/services/__init__.py +10 -0
  296. htmlgraph/services/claiming.py +199 -0
  297. htmlgraph/session_hooks.py +300 -0
  298. htmlgraph/session_manager.py +1392 -175
  299. htmlgraph/session_registry.py +587 -0
  300. htmlgraph/session_state.py +436 -0
  301. htmlgraph/session_warning.py +201 -0
  302. htmlgraph/sessions/__init__.py +23 -0
  303. htmlgraph/sessions/handoff.py +756 -0
  304. htmlgraph/setup.py +34 -17
  305. htmlgraph/spike_index.py +143 -0
  306. htmlgraph/sync_docs.py +12 -15
  307. htmlgraph/system_prompts.py +450 -0
  308. htmlgraph/templates/AGENTS.md.template +366 -0
  309. htmlgraph/templates/CLAUDE.md.template +97 -0
  310. htmlgraph/templates/GEMINI.md.template +87 -0
  311. htmlgraph/templates/orchestration-view.html +350 -0
  312. htmlgraph/track_builder.py +146 -15
  313. htmlgraph/track_manager.py +69 -21
  314. htmlgraph/transcript.py +890 -0
  315. htmlgraph/transcript_analytics.py +699 -0
  316. htmlgraph/types.py +323 -0
  317. htmlgraph/validation.py +115 -0
  318. htmlgraph/watch.py +8 -5
  319. htmlgraph/work_type_utils.py +3 -2
  320. {htmlgraph-0.9.3.data → htmlgraph-0.27.5.data}/data/htmlgraph/dashboard.html +2406 -307
  321. htmlgraph-0.27.5.data/data/htmlgraph/templates/AGENTS.md.template +366 -0
  322. htmlgraph-0.27.5.data/data/htmlgraph/templates/CLAUDE.md.template +97 -0
  323. htmlgraph-0.27.5.data/data/htmlgraph/templates/GEMINI.md.template +87 -0
  324. {htmlgraph-0.9.3.dist-info → htmlgraph-0.27.5.dist-info}/METADATA +97 -64
  325. htmlgraph-0.27.5.dist-info/RECORD +337 -0
  326. {htmlgraph-0.9.3.dist-info → htmlgraph-0.27.5.dist-info}/entry_points.txt +1 -1
  327. htmlgraph/cli.py +0 -2688
  328. htmlgraph/sdk.py +0 -709
  329. htmlgraph-0.9.3.dist-info/RECORD +0 -61
  330. {htmlgraph-0.9.3.data → htmlgraph-0.27.5.data}/data/htmlgraph/styles.css +0 -0
  331. {htmlgraph-0.9.3.dist-info → htmlgraph-0.27.5.dist-info}/WHEEL +0 -0
@@ -0,0 +1,53 @@
1
+ from __future__ import annotations
2
+
3
+ """
4
+ Bug collection for managing bug report work items.
5
+
6
+ Extends BaseCollection with bug-specific builder support.
7
+ """
8
+
9
+
10
+ from typing import TYPE_CHECKING
11
+
12
+ if TYPE_CHECKING:
13
+ from htmlgraph.sdk import SDK
14
+
15
+ from htmlgraph.collections.base import BaseCollection
16
+
17
+
18
+ class BugCollection(BaseCollection["BugCollection"]):
19
+ """
20
+ Collection interface for bugs with builder support.
21
+
22
+ Provides all base collection methods plus a fluent builder
23
+ interface for creating new bugs.
24
+
25
+ Example:
26
+ >>> sdk = SDK(agent="claude")
27
+ >>> bug = sdk.bugs.create("Login button broken") \\
28
+ ... .set_priority("critical") \\
29
+ ... .set_severity("high") \\
30
+ ... .set_repro_steps(["Go to login", "Click button"]) \\
31
+ ... .save()
32
+ >>>
33
+ >>> # Query bugs
34
+ >>> critical_bugs = sdk.bugs.where(priority="critical")
35
+ """
36
+
37
+ _collection_name = "bugs"
38
+ _node_type = "bug"
39
+
40
+ def __init__(self, sdk: SDK):
41
+ """
42
+ Initialize bug collection.
43
+
44
+ Args:
45
+ sdk: Parent SDK instance
46
+ """
47
+ super().__init__(sdk, "bugs", "bug")
48
+ self._sdk = sdk
49
+
50
+ # Set builder class for create() method
51
+ from htmlgraph.builders.bug import BugBuilder
52
+
53
+ self._builder_class = BugBuilder
@@ -0,0 +1,53 @@
1
+ from __future__ import annotations
2
+
3
+ """
4
+ Chore collection for managing maintenance task work items.
5
+
6
+ Extends BaseCollection with chore-specific builder support.
7
+ """
8
+
9
+
10
+ from typing import TYPE_CHECKING
11
+
12
+ if TYPE_CHECKING:
13
+ from htmlgraph.sdk import SDK
14
+
15
+ from htmlgraph.collections.base import BaseCollection
16
+
17
+
18
+ class ChoreCollection(BaseCollection["ChoreCollection"]):
19
+ """
20
+ Collection interface for chores with builder support.
21
+
22
+ Provides all base collection methods plus a fluent builder
23
+ interface for creating new chores.
24
+
25
+ Example:
26
+ >>> sdk = SDK(agent="claude")
27
+ >>> chore = sdk.chores.create("Update dependencies") \\
28
+ ... .set_priority("low") \\
29
+ ... .set_chore_type("maintenance") \\
30
+ ... .set_recurring(interval_days=30) \\
31
+ ... .save()
32
+ >>>
33
+ >>> # Query chores
34
+ >>> maintenance = sdk.chores.where(status="todo")
35
+ """
36
+
37
+ _collection_name = "chores"
38
+ _node_type = "chore"
39
+
40
+ def __init__(self, sdk: SDK):
41
+ """
42
+ Initialize chore collection.
43
+
44
+ Args:
45
+ sdk: Parent SDK instance
46
+ """
47
+ super().__init__(sdk, "chores", "chore")
48
+ self._sdk = sdk
49
+
50
+ # Set builder class for create() method
51
+ from htmlgraph.builders.chore import ChoreBuilder
52
+
53
+ self._builder_class = ChoreBuilder
@@ -0,0 +1,53 @@
1
+ from __future__ import annotations
2
+
3
+ """
4
+ Epic collection for managing large body of work items.
5
+
6
+ Extends BaseCollection with epic-specific builder support.
7
+ """
8
+
9
+
10
+ from typing import TYPE_CHECKING
11
+
12
+ if TYPE_CHECKING:
13
+ from htmlgraph.sdk import SDK
14
+
15
+ from htmlgraph.collections.base import BaseCollection
16
+
17
+
18
+ class EpicCollection(BaseCollection["EpicCollection"]):
19
+ """
20
+ Collection interface for epics with builder support.
21
+
22
+ Provides all base collection methods plus a fluent builder
23
+ interface for creating new epics.
24
+
25
+ Example:
26
+ >>> sdk = SDK(agent="claude")
27
+ >>> epic = sdk.epics.create("v2.0 Release") \\
28
+ ... .set_priority("high") \\
29
+ ... .set_target_date(date(2025, 6, 1)) \\
30
+ ... .add_child_features(["feat-001", "feat-002"]) \\
31
+ ... .save()
32
+ >>>
33
+ >>> # Query epics
34
+ >>> active_epics = sdk.epics.where(status="in-progress")
35
+ """
36
+
37
+ _collection_name = "epics"
38
+ _node_type = "epic"
39
+
40
+ def __init__(self, sdk: SDK):
41
+ """
42
+ Initialize epic collection.
43
+
44
+ Args:
45
+ sdk: Parent SDK instance
46
+ """
47
+ super().__init__(sdk, "epics", "epic")
48
+ self._sdk = sdk
49
+
50
+ # Set builder class for create() method
51
+ from htmlgraph.builders.epic import EpicBuilder
52
+
53
+ self._builder_class = EpicBuilder
@@ -1,21 +1,22 @@
1
+ from __future__ import annotations
2
+
1
3
  """
2
4
  Feature collection for managing feature work items.
3
5
 
4
6
  Extends BaseCollection with feature-specific builder support.
5
7
  """
6
8
 
7
- from __future__ import annotations
8
- from typing import TYPE_CHECKING, Any
9
+
10
+ from typing import TYPE_CHECKING
9
11
 
10
12
  if TYPE_CHECKING:
11
- from htmlgraph.sdk import SDK
12
- from htmlgraph.builders import FeatureBuilder
13
13
  from htmlgraph.models import Node
14
+ from htmlgraph.sdk import SDK
14
15
 
15
16
  from htmlgraph.collections.base import BaseCollection
16
17
 
17
18
 
18
- class FeatureCollection(BaseCollection['FeatureCollection']):
19
+ class FeatureCollection(BaseCollection["FeatureCollection"]):
19
20
  """
20
21
  Collection interface for features with builder support.
21
22
 
@@ -37,7 +38,7 @@ class FeatureCollection(BaseCollection['FeatureCollection']):
37
38
  _collection_name = "features"
38
39
  _node_type = "feature"
39
40
 
40
- def __init__(self, sdk: 'SDK'):
41
+ def __init__(self, sdk: SDK):
41
42
  """
42
43
  Initialize feature collection.
43
44
 
@@ -47,25 +48,10 @@ class FeatureCollection(BaseCollection['FeatureCollection']):
47
48
  super().__init__(sdk, "features", "feature")
48
49
  self._sdk = sdk
49
50
 
50
- def create(self, title: str, **kwargs) -> FeatureBuilder:
51
- """
52
- Create a new feature with fluent interface.
53
-
54
- Args:
55
- title: Feature title
56
- **kwargs: Additional feature properties
57
-
58
- Returns:
59
- FeatureBuilder for method chaining
60
-
61
- Example:
62
- >>> feature = sdk.features.create("User Auth") \\
63
- ... .set_priority("high") \\
64
- ... .add_steps(["Login", "Logout"]) \\
65
- ... .save()
66
- """
51
+ # Set builder class for create() method
67
52
  from htmlgraph.builders import FeatureBuilder
68
- return FeatureBuilder(self._sdk, title, **kwargs)
53
+
54
+ self._builder_class = FeatureBuilder
69
55
 
70
56
  def set_primary(self, node_id: str) -> Node | None:
71
57
  """
@@ -79,11 +65,11 @@ class FeatureCollection(BaseCollection['FeatureCollection']):
79
65
  Returns:
80
66
  Updated Node
81
67
  """
82
- if hasattr(self._sdk, 'session_manager'):
68
+ if hasattr(self._sdk, "session_manager"):
83
69
  return self._sdk.session_manager.set_primary_feature(
84
70
  feature_id=node_id,
85
71
  collection=self._collection_name,
86
72
  agent=self._sdk.agent,
87
- log_activity=True
73
+ log_activity=True,
88
74
  )
89
75
  return None
@@ -0,0 +1,100 @@
1
+ from __future__ import annotations
2
+
3
+ """
4
+ SessionInsight collection for managing session insights.
5
+
6
+ Extends BaseCollection with insight-specific query methods.
7
+ """
8
+
9
+
10
+ from typing import TYPE_CHECKING
11
+
12
+ if TYPE_CHECKING:
13
+ from htmlgraph.models import Node
14
+ from htmlgraph.sdk import SDK
15
+
16
+ from htmlgraph.collections.base import BaseCollection
17
+
18
+
19
+ class InsightCollection(BaseCollection["InsightCollection"]):
20
+ """
21
+ Collection interface for session insights.
22
+
23
+ Provides all base collection methods plus insight-specific
24
+ queries for analyzing session efficiency and detecting issues.
25
+
26
+ Example:
27
+ >>> sdk = SDK(agent="claude")
28
+ >>> insight = sdk.insights.for_session("sess-abc-123")
29
+ >>>
30
+ >>> # Query insights
31
+ >>> low_eff = sdk.insights.get_low_efficiency(threshold=0.7)
32
+ >>> with_issues = sdk.insights.get_with_issues()
33
+ """
34
+
35
+ _collection_name = "insights"
36
+ _node_type = "insight"
37
+
38
+ def __init__(self, sdk: SDK):
39
+ """
40
+ Initialize insight collection.
41
+
42
+ Args:
43
+ sdk: Parent SDK instance
44
+ """
45
+ super().__init__(sdk, "insights", "insight")
46
+ self._sdk = sdk
47
+
48
+ # Set builder class for create() method
49
+ from htmlgraph.builders import InsightBuilder
50
+
51
+ self._builder_class = InsightBuilder
52
+
53
+ def for_session(self, session_id: str) -> Node | None:
54
+ """
55
+ Get insight for a specific session.
56
+
57
+ Args:
58
+ session_id: Session ID to find insight for
59
+
60
+ Returns:
61
+ Insight node if found, None otherwise
62
+
63
+ Example:
64
+ >>> insight = sdk.insights.for_session("sess-abc-123")
65
+ """
66
+ results = list(self.where(session_id=session_id))
67
+ return results[0] if results else None
68
+
69
+ def get_low_efficiency(self, threshold: float = 0.7) -> list[Node]:
70
+ """
71
+ Get insights with efficiency below threshold.
72
+
73
+ Args:
74
+ threshold: Minimum efficiency score (0.0 to 1.0)
75
+
76
+ Returns:
77
+ List of insights with efficiency_score < threshold
78
+
79
+ Example:
80
+ >>> low_eff = sdk.insights.get_low_efficiency(threshold=0.6)
81
+ """
82
+ return [
83
+ i
84
+ for i in self.all()
85
+ if hasattr(i, "efficiency_score") and i.efficiency_score < threshold
86
+ ]
87
+
88
+ def get_with_issues(self) -> list[Node]:
89
+ """
90
+ Get insights that detected issues.
91
+
92
+ Returns:
93
+ List of insights where issues_detected is True
94
+
95
+ Example:
96
+ >>> problematic = sdk.insights.get_with_issues()
97
+ """
98
+ return [
99
+ i for i in self.all() if hasattr(i, "issues_detected") and i.issues_detected
100
+ ]
@@ -0,0 +1,92 @@
1
+ from __future__ import annotations
2
+
3
+ """
4
+ AggregatedMetric collection for managing aggregated metrics.
5
+
6
+ Extends BaseCollection with metric-specific query methods.
7
+ """
8
+
9
+
10
+ from typing import TYPE_CHECKING
11
+
12
+ if TYPE_CHECKING:
13
+ from htmlgraph.models import Node
14
+ from htmlgraph.sdk import SDK
15
+
16
+ from htmlgraph.collections.base import BaseCollection
17
+
18
+
19
+ class MetricCollection(BaseCollection["MetricCollection"]):
20
+ """
21
+ Collection interface for aggregated metrics.
22
+
23
+ Provides all base collection methods plus metric-specific
24
+ queries for analyzing trends and retrieving latest metrics.
25
+
26
+ Example:
27
+ >>> sdk = SDK(agent="claude")
28
+ >>> latest = sdk.metrics.get_latest(scope="session", period="weekly")
29
+ >>>
30
+ >>> # Query metrics
31
+ >>> trending = sdk.metrics.get_trend(scope="session")
32
+ """
33
+
34
+ _collection_name = "metrics"
35
+ _node_type = "metric"
36
+
37
+ def __init__(self, sdk: SDK):
38
+ """
39
+ Initialize metric collection.
40
+
41
+ Args:
42
+ sdk: Parent SDK instance
43
+ """
44
+ super().__init__(sdk, "metrics", "metric")
45
+ self._sdk = sdk
46
+
47
+ # Set builder class for create() method
48
+ from htmlgraph.builders import MetricBuilder
49
+
50
+ self._builder_class = MetricBuilder
51
+
52
+ def get_latest(self, scope: str = "session", period: str = "weekly") -> Node | None:
53
+ """
54
+ Get the most recent metric for a scope/period.
55
+
56
+ Args:
57
+ scope: Metric scope (e.g., "session", "feature", "agent")
58
+ period: Time period (e.g., "daily", "weekly", "monthly")
59
+
60
+ Returns:
61
+ Most recent metric node if found, None otherwise
62
+
63
+ Example:
64
+ >>> latest = sdk.metrics.get_latest(scope="session", period="weekly")
65
+ """
66
+ results = list(self.where(scope=scope, period=period))
67
+ if not results:
68
+ return None
69
+ # Sort by period_end descending (most recent first)
70
+ results.sort(key=lambda m: getattr(m, "period_end", "") or "", reverse=True)
71
+ return results[0]
72
+
73
+ def get_trend(self, scope: str = "session") -> list[Node]:
74
+ """
75
+ Get metrics showing trends for a scope.
76
+
77
+ Filters out metrics with "stable" trend_direction.
78
+
79
+ Args:
80
+ scope: Metric scope to filter by
81
+
82
+ Returns:
83
+ List of metrics with non-stable trends
84
+
85
+ Example:
86
+ >>> trending = sdk.metrics.get_trend(scope="session")
87
+ """
88
+ return [
89
+ m
90
+ for m in self.where(scope=scope)
91
+ if hasattr(m, "trend_direction") and m.trend_direction != "stable"
92
+ ]
@@ -0,0 +1,97 @@
1
+ from __future__ import annotations
2
+
3
+ """
4
+ Pattern collection for managing workflow patterns.
5
+
6
+ Extends BaseCollection with pattern-specific query methods.
7
+ """
8
+
9
+
10
+ from typing import TYPE_CHECKING
11
+
12
+ if TYPE_CHECKING:
13
+ from htmlgraph.models import Node
14
+ from htmlgraph.sdk import SDK
15
+
16
+ from htmlgraph.collections.base import BaseCollection
17
+
18
+
19
+ class PatternCollection(BaseCollection["PatternCollection"]):
20
+ """
21
+ Collection interface for workflow patterns.
22
+
23
+ Provides all base collection methods plus pattern-specific
24
+ queries for finding optimal patterns and anti-patterns.
25
+
26
+ Example:
27
+ >>> sdk = SDK(agent="claude")
28
+ >>> pattern = sdk.patterns.create("File-then-Edit Pattern") \\
29
+ ... .set_sequence(["Read", "Edit"]) \\
30
+ ... .save()
31
+ >>>
32
+ >>> # Query patterns
33
+ >>> optimal = sdk.patterns.get_optimal_patterns()
34
+ >>> anti = sdk.patterns.get_anti_patterns()
35
+ """
36
+
37
+ _collection_name = "patterns"
38
+ _node_type = "pattern"
39
+
40
+ def __init__(self, sdk: SDK):
41
+ """
42
+ Initialize pattern collection.
43
+
44
+ Args:
45
+ sdk: Parent SDK instance
46
+ """
47
+ super().__init__(sdk, "patterns", "pattern")
48
+ self._sdk = sdk
49
+
50
+ # Set builder class for create() method
51
+ from htmlgraph.builders import PatternBuilder
52
+
53
+ self._builder_class = PatternBuilder
54
+
55
+ def find_by_sequence(self, sequence: list[str]) -> list[Node]:
56
+ """
57
+ Find patterns matching a specific tool sequence.
58
+
59
+ Args:
60
+ sequence: List of tool names in order (e.g., ["Read", "Edit"])
61
+
62
+ Returns:
63
+ List of patterns with matching sequence
64
+
65
+ Example:
66
+ >>> patterns = sdk.patterns.find_by_sequence(["Read", "Edit"])
67
+ """
68
+ seq_str = "->".join(sequence)
69
+ return [
70
+ p
71
+ for p in self.all()
72
+ if hasattr(p, "sequence") and "->".join(p.sequence) == seq_str
73
+ ]
74
+
75
+ def get_anti_patterns(self) -> list[Node]:
76
+ """
77
+ Get all anti-patterns.
78
+
79
+ Returns:
80
+ List of anti-pattern nodes
81
+
82
+ Example:
83
+ >>> anti_patterns = sdk.patterns.get_anti_patterns()
84
+ """
85
+ return self.where(pattern_type="anti-pattern")
86
+
87
+ def get_optimal_patterns(self) -> list[Node]:
88
+ """
89
+ Get all optimal patterns.
90
+
91
+ Returns:
92
+ List of optimal pattern nodes
93
+
94
+ Example:
95
+ >>> optimal = sdk.patterns.get_optimal_patterns()
96
+ """
97
+ return self.where(pattern_type="optimal")
@@ -0,0 +1,53 @@
1
+ from __future__ import annotations
2
+
3
+ """
4
+ Phase collection for managing project phase work items.
5
+
6
+ Extends BaseCollection with phase-specific builder support.
7
+ """
8
+
9
+
10
+ from typing import TYPE_CHECKING
11
+
12
+ if TYPE_CHECKING:
13
+ from htmlgraph.sdk import SDK
14
+
15
+ from htmlgraph.collections.base import BaseCollection
16
+
17
+
18
+ class PhaseCollection(BaseCollection["PhaseCollection"]):
19
+ """
20
+ Collection interface for phases with builder support.
21
+
22
+ Provides all base collection methods plus a fluent builder
23
+ interface for creating new phases.
24
+
25
+ Example:
26
+ >>> sdk = SDK(agent="claude")
27
+ >>> phase = sdk.phases.create("Phase 1: Core Library") \\
28
+ ... .set_priority("high") \\
29
+ ... .set_phase_number(1) \\
30
+ ... .set_deliverables(["Core API", "Tests"]) \\
31
+ ... .save()
32
+ >>>
33
+ >>> # Query phases
34
+ >>> active_phases = sdk.phases.where(status="in-progress")
35
+ """
36
+
37
+ _collection_name = "phases"
38
+ _node_type = "phase"
39
+
40
+ def __init__(self, sdk: SDK):
41
+ """
42
+ Initialize phase collection.
43
+
44
+ Args:
45
+ sdk: Parent SDK instance
46
+ """
47
+ super().__init__(sdk, "phases", "phase")
48
+ self._sdk = sdk
49
+
50
+ # Set builder class for create() method
51
+ from htmlgraph.builders.phase import PhaseBuilder
52
+
53
+ self._builder_class = PhaseBuilder