htmlgraph 0.20.3__py3-none-any.whl → 0.20.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/__init__.py CHANGED
@@ -84,7 +84,7 @@ from htmlgraph.types import (
84
84
  )
85
85
  from htmlgraph.work_type_utils import infer_work_type, infer_work_type_from_id
86
86
 
87
- __version__ = "0.20.3"
87
+ __version__ = "0.20.5"
88
88
  __all__ = [
89
89
  # Exceptions
90
90
  "HtmlGraphError",
htmlgraph/cli.py CHANGED
@@ -3241,6 +3241,64 @@ def cmd_track_plan(args: argparse.Namespace) -> None:
3241
3241
  print(f"\nView plan: open {args.graph_dir}/tracks/{args.track_id}/plan.html")
3242
3242
 
3243
3243
 
3244
+ def cmd_track_show(args: argparse.Namespace) -> None:
3245
+ """Show details of a track."""
3246
+ import json
3247
+ from pathlib import Path
3248
+
3249
+ from htmlgraph.track_manager import TrackManager
3250
+
3251
+ manager = TrackManager(args.graph_dir)
3252
+
3253
+ # Load the track
3254
+ track = manager.load_track(args.track_id)
3255
+ if not track:
3256
+ print(f"Error: Track '{args.track_id}' not found", file=sys.stderr)
3257
+ sys.exit(1)
3258
+
3259
+ if args.format == "json":
3260
+ data = {
3261
+ "id": track.id,
3262
+ "title": track.title,
3263
+ "description": track.description,
3264
+ "status": track.status,
3265
+ "priority": track.priority,
3266
+ "has_spec": track.has_spec,
3267
+ "has_plan": track.has_plan,
3268
+ "created": track.created.isoformat(),
3269
+ "updated": track.updated.isoformat(),
3270
+ "features": track.features,
3271
+ "sessions": track.sessions,
3272
+ }
3273
+ print(json.dumps(data, indent=2))
3274
+ else:
3275
+ # Determine if consolidated or directory-based
3276
+ is_consolidated = manager.is_consolidated(args.track_id)
3277
+ if is_consolidated:
3278
+ track_file = Path(args.graph_dir) / "tracks" / f"{args.track_id}.html"
3279
+ file_type = "single file (consolidated)"
3280
+ else:
3281
+ track_file = Path(args.graph_dir) / "tracks" / args.track_id / "index.html"
3282
+ file_type = "directory-based"
3283
+
3284
+ print(f"Track: {track.id}")
3285
+ print(f" Title: {track.title}")
3286
+ print(f" Description: {track.description}")
3287
+ print(f" Status: {track.status}")
3288
+ print(f" Priority: {track.priority}")
3289
+ print(f" Format: {file_type}")
3290
+ print(f" Has Spec: {'Yes' if track.has_spec else 'No'}")
3291
+ print(f" Has Plan: {'Yes' if track.has_plan else 'No'}")
3292
+ print(f" Created: {track.created.strftime('%Y-%m-%d %H:%M')}")
3293
+ print(f" Updated: {track.updated.strftime('%Y-%m-%d %H:%M')}")
3294
+ if track.features:
3295
+ print(f" Features: {', '.join(track.features)}")
3296
+ if track.sessions:
3297
+ print(f" Sessions: {', '.join(track.sessions)}")
3298
+ print(f"\nPath: {track_file}")
3299
+ print(f"View: open {track_file}")
3300
+
3301
+
3244
3302
  def cmd_track_delete(args: argparse.Namespace) -> None:
3245
3303
  """Delete a track."""
3246
3304
  import json
@@ -4248,6 +4306,16 @@ For more help: https://github.com/Shakes-tzd/htmlgraph
4248
4306
  "--format", "-f", choices=["text", "json"], default="text", help="Output format"
4249
4307
  )
4250
4308
 
4309
+ # track show
4310
+ track_show = track_subparsers.add_parser("show", help="Show track details")
4311
+ track_show.add_argument("track_id", help="Track ID to display")
4312
+ track_show.add_argument(
4313
+ "--graph-dir", "-g", default=".htmlgraph", help="Graph directory"
4314
+ )
4315
+ track_show.add_argument(
4316
+ "--format", "-f", choices=["text", "json"], default="text", help="Output format"
4317
+ )
4318
+
4251
4319
  # track delete
4252
4320
  track_delete = track_subparsers.add_parser("delete", help="Delete a track")
4253
4321
  track_delete.add_argument("track_id", help="Track ID to delete")
@@ -4625,6 +4693,8 @@ For more help: https://github.com/Shakes-tzd/htmlgraph
4625
4693
  cmd_track_spec(args)
4626
4694
  elif args.track_command == "plan":
4627
4695
  cmd_track_plan(args)
4696
+ elif args.track_command == "show":
4697
+ cmd_track_show(args)
4628
4698
  elif args.track_command == "delete":
4629
4699
  cmd_track_delete(args)
4630
4700
  else:
@@ -4671,7 +4741,7 @@ For more help: https://github.com/Shakes-tzd/htmlgraph
4671
4741
  feature_parser.print_help()
4672
4742
  sys.exit(1)
4673
4743
  elif args.command == "analytics":
4674
- from htmlgraph.cli_analytics import cmd_analytics
4744
+ from htmlgraph.analytics.cli import cmd_analytics
4675
4745
 
4676
4746
  cmd_analytics(args)
4677
4747
  elif args.command == "events":
@@ -338,6 +338,44 @@ class TrackManager:
338
338
  track_id=track_id,
339
339
  )
340
340
 
341
+ def load_track(self, track_id: str) -> Track | None:
342
+ """
343
+ Load a track from disk.
344
+
345
+ Supports both consolidated (single .html file) and directory-based tracks.
346
+
347
+ Args:
348
+ track_id: Track ID
349
+
350
+ Returns:
351
+ Track instance or None if not found
352
+ """
353
+ track_path = self.get_track_path(track_id)
354
+ if track_path is None:
355
+ return None
356
+
357
+ # For now, return a basic Track instance
358
+ # TODO: Parse HTML back to Track using justhtml
359
+ if track_path.is_file():
360
+ # Consolidated format - single file
361
+ return Track(
362
+ id=track_id,
363
+ title=f"Track {track_id}",
364
+ description="Loaded from consolidated format",
365
+ )
366
+ else:
367
+ # Directory format - check for spec and plan
368
+ spec_exists = (track_path / "spec.html").exists()
369
+ plan_exists = (track_path / "plan.html").exists()
370
+
371
+ return Track(
372
+ id=track_id,
373
+ title=f"Track {track_id}",
374
+ description="Loaded from directory format",
375
+ has_spec=spec_exists,
376
+ has_plan=plan_exists,
377
+ )
378
+
341
379
  def list_tracks(self) -> list[str]:
342
380
  """
343
381
  List all track IDs.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: htmlgraph
3
- Version: 0.20.3
3
+ Version: 0.20.5
4
4
  Summary: HTML is All You Need - Graph database on web standards
5
5
  Project-URL: Homepage, https://github.com/Shakes-tzd/htmlgraph
6
6
  Project-URL: Documentation, https://github.com/Shakes-tzd/htmlgraph#readme
@@ -1,10 +1,10 @@
1
- htmlgraph/__init__.py,sha256=q7f-IQyiqw8sLurh9hC8rSIoomoMTcHd95SVh-lFpNE,4979
1
+ htmlgraph/__init__.py,sha256=ATwygmKV2sI3tGwJ6kcEGLk3Ehj7NKsJqv6nmqj5vnA,4979
2
2
  htmlgraph/agent_detection.py,sha256=PAYo7rU3N_y1cGRd7Dwjh5Wgu-QZ7ENblX_yOzU-gJ0,2749
3
3
  htmlgraph/agent_registry.py,sha256=Usa_35by7p5gtpvHO7K3AcGimnorw-FzgPVa3cWTQ58,9448
4
4
  htmlgraph/agents.py,sha256=Yvu6x1nOfrW2WhRTAHiCuSpvqoVJXx1Mkzd59kwEczw,33466
5
5
  htmlgraph/analytics_index.py,sha256=ba6Y4H_NNOCxI_Z4U7wSgBFFairf4IJT74WcM1PoZuI,30594
6
6
  htmlgraph/attribute_index.py,sha256=cBZUV4YfGnhh6lF59aYPCdNrRr1hK__BzSKCueSDUhQ,6593
7
- htmlgraph/cli.py,sha256=RvcJFIhJZSC1mgEALeyfBB6EzMhJ3MUZU7EIal76i30,170549
7
+ htmlgraph/cli.py,sha256=wYoCjciu1cHqwZe84u2TgO7lS_YyTs4yX5ipLLUqUfo,173218
8
8
  htmlgraph/context_analytics.py,sha256=CaLu0o2uSr6rlBM5YeaFZe7grgsy7_Hx10qdXuNcdao,11344
9
9
  htmlgraph/converter.py,sha256=SHS_7F6DHCPhmpZcLl3wN2LgGGP4XWApZ9TkW-u5m_c,20556
10
10
  htmlgraph/dashboard.html,sha256=rkZYjSnPbUuAm35QMpCNWemenYqQTdkkumCX2hhe8Dc,173537
@@ -42,7 +42,7 @@ htmlgraph/spike_index.py,sha256=-qsJc92MtxJN1whHqV1SGU6HjXkKeG2Vsg7l3q2ReRg,4264
42
42
  htmlgraph/styles.css,sha256=oDUSC8jG-V-hKojOBO9J88hxAeY2wJrBYTq0uCwX_Y4,7135
43
43
  htmlgraph/sync_docs.py,sha256=CH1xB3OeOFG6Wmo_D_r1aiGWS1P1gE7hfjJySCEz7bc,9114
44
44
  htmlgraph/track_builder.py,sha256=3Ldtv6OsBfrCqpXiUB13TOjuchJdgo4IuOYnFCaxc1k,6009
45
- htmlgraph/track_manager.py,sha256=euNXQustRRmqeuwsN08jlDnQ4qbRZ02oedaFdaOGFi0,21223
45
+ htmlgraph/track_manager.py,sha256=HhCg0nFOy_dx2R0_Bb2IOx9dA2lPfg7dM-_O3vBmlRU,22445
46
46
  htmlgraph/transcript.py,sha256=uk_I9tirypUdMRfKxJmoHuaySxlu1OWt7xy774KYZNw,31808
47
47
  htmlgraph/transcript_analytics.py,sha256=O-T7SfM3gJIbGFNPlF3gmKjcy--NzPiJt03lvTC209w,24922
48
48
  htmlgraph/types.py,sha256=EBxCbke3PhORsmIhHrD-f1XG6YPRX-1D5R1OXCp6xt8,8945
@@ -107,12 +107,12 @@ htmlgraph/services/claiming.py,sha256=HcrltEJKN72mxuD7fGuXWeh1U0vwhjMvhZcFc02Eiy
107
107
  htmlgraph/templates/AGENTS.md.template,sha256=f96h7V6ygwj-v-fanVI48eYMxR6t_se4bet1H4ZsDpI,7642
108
108
  htmlgraph/templates/CLAUDE.md.template,sha256=h1kG2hTX2XYig2KszsHBfzrwa_4Cfcq2Pj4SwqzeDlM,1984
109
109
  htmlgraph/templates/GEMINI.md.template,sha256=gAGzE53Avki87BM_otqy5HdcYCoLsHgqaKjVzNzPMX8,1622
110
- htmlgraph-0.20.3.data/data/htmlgraph/dashboard.html,sha256=rkZYjSnPbUuAm35QMpCNWemenYqQTdkkumCX2hhe8Dc,173537
111
- htmlgraph-0.20.3.data/data/htmlgraph/styles.css,sha256=oDUSC8jG-V-hKojOBO9J88hxAeY2wJrBYTq0uCwX_Y4,7135
112
- htmlgraph-0.20.3.data/data/htmlgraph/templates/AGENTS.md.template,sha256=f96h7V6ygwj-v-fanVI48eYMxR6t_se4bet1H4ZsDpI,7642
113
- htmlgraph-0.20.3.data/data/htmlgraph/templates/CLAUDE.md.template,sha256=h1kG2hTX2XYig2KszsHBfzrwa_4Cfcq2Pj4SwqzeDlM,1984
114
- htmlgraph-0.20.3.data/data/htmlgraph/templates/GEMINI.md.template,sha256=gAGzE53Avki87BM_otqy5HdcYCoLsHgqaKjVzNzPMX8,1622
115
- htmlgraph-0.20.3.dist-info/METADATA,sha256=O9sf78ar2DpOXVtjErl-0bqyfsxPVjJLiRac-uDDKH0,7645
116
- htmlgraph-0.20.3.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
117
- htmlgraph-0.20.3.dist-info/entry_points.txt,sha256=EaUbjA_bbDwEO_XDLEGMeK8aQP-ZnHiUTkLshyKDyB8,98
118
- htmlgraph-0.20.3.dist-info/RECORD,,
110
+ htmlgraph-0.20.5.data/data/htmlgraph/dashboard.html,sha256=rkZYjSnPbUuAm35QMpCNWemenYqQTdkkumCX2hhe8Dc,173537
111
+ htmlgraph-0.20.5.data/data/htmlgraph/styles.css,sha256=oDUSC8jG-V-hKojOBO9J88hxAeY2wJrBYTq0uCwX_Y4,7135
112
+ htmlgraph-0.20.5.data/data/htmlgraph/templates/AGENTS.md.template,sha256=f96h7V6ygwj-v-fanVI48eYMxR6t_se4bet1H4ZsDpI,7642
113
+ htmlgraph-0.20.5.data/data/htmlgraph/templates/CLAUDE.md.template,sha256=h1kG2hTX2XYig2KszsHBfzrwa_4Cfcq2Pj4SwqzeDlM,1984
114
+ htmlgraph-0.20.5.data/data/htmlgraph/templates/GEMINI.md.template,sha256=gAGzE53Avki87BM_otqy5HdcYCoLsHgqaKjVzNzPMX8,1622
115
+ htmlgraph-0.20.5.dist-info/METADATA,sha256=SKM5XHzZpHhf1VgcVpR1mK6SPf_lYeIccb3MUlcOGJw,7645
116
+ htmlgraph-0.20.5.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
117
+ htmlgraph-0.20.5.dist-info/entry_points.txt,sha256=EaUbjA_bbDwEO_XDLEGMeK8aQP-ZnHiUTkLshyKDyB8,98
118
+ htmlgraph-0.20.5.dist-info/RECORD,,