agentglow 0.2.2__tar.gz → 0.2.4__tar.gz

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 (48) hide show
  1. {agentglow-0.2.2 → agentglow-0.2.4}/PKG-INFO +2 -2
  2. {agentglow-0.2.2 → agentglow-0.2.4}/README.md +1 -1
  3. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/claude_code.py +16 -5
  4. {agentglow-0.2.2 → agentglow-0.2.4}/pyproject.toml +1 -1
  5. {agentglow-0.2.2 → agentglow-0.2.4}/.gitignore +0 -0
  6. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/__init__.py +0 -0
  7. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/auth.py +0 -0
  8. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/cli.py +0 -0
  9. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/manual.py +0 -0
  10. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/mapper.py +0 -0
  11. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/otel.py +0 -0
  12. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/scope.py +0 -0
  13. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/scrub.py +0 -0
  14. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/server.py +0 -0
  15. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/state.py +0 -0
  16. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/static/assets/Gallery-CQEYu2WV.css +0 -0
  17. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/static/assets/Gallery-CsryKBMI.js +0 -0
  18. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/static/assets/Grid-5PzIAfc4.js +0 -0
  19. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/static/assets/KitScene-5RjK9pDR.css +0 -0
  20. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/static/assets/KitScene-CQD6w-MD.js +0 -0
  21. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/static/assets/Sparkles-CMBkdFW5.js +0 -0
  22. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/static/assets/Stars-98BZejLh.js +0 -0
  23. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/static/assets/Trail-DeOXiGv0.js +0 -0
  24. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/static/assets/index-B-2100Nj.js +0 -0
  25. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/static/assets/index-BIYiiB0W.js +0 -0
  26. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/static/assets/index-BK7G8ymO.js +0 -0
  27. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/static/assets/index-BTejmghk.js +0 -0
  28. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/static/assets/index-B_Ox3Guu.css +0 -0
  29. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/static/assets/index-CIbdJsCm.css +0 -0
  30. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/static/assets/index-ClBn3rum.js +0 -0
  31. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/static/assets/index-Czy7obCa.js +0 -0
  32. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/static/assets/index-D7lvbCdW.js +0 -0
  33. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/static/assets/index-D9wBYbu3.css +0 -0
  34. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/static/assets/index-DAoQnlbr.js +0 -0
  35. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/static/assets/index-DBpni2J9.js +0 -0
  36. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/static/assets/index-DManaqvd.css +0 -0
  37. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/static/assets/index-DO0CsRmC.js +0 -0
  38. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/static/assets/index-DQcTs4wk.js +0 -0
  39. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/static/assets/index-DzAyw_k4.js +0 -0
  40. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/static/assets/index-F2LPkZZY.js +0 -0
  41. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/static/assets/index-FwcKcxcF.js +0 -0
  42. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/static/assets/index-HnuICwcD.css +0 -0
  43. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/static/assets/index-O1uZvCR6.js +0 -0
  44. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/static/assets/index-OzIlQ9lY.js +0 -0
  45. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/static/assets/inter-latin-500-normal-BL9OpVg8.woff +0 -0
  46. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/static/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
  47. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/static/index.html +0 -0
  48. {agentglow-0.2.2 → agentglow-0.2.4}/agentglow/watch.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: agentglow
3
- Version: 0.2.2
3
+ Version: 0.2.4
4
4
  Summary: Live 3D views of agent systems, driven only by OpenTelemetry spans
5
5
  Project-URL: Homepage, https://github.com/Nideesh1/agentglow
6
6
  License: MIT
@@ -29,7 +29,7 @@ born when its span starts, pulses on each LLM call, fires tool/MCP/graph packets
29
29
  when its span ends. Works with LangChain, LangGraph (incl. `langgraph-supervisor`), deepagents, the OpenAI Agents SDK
30
30
  (`agentglow[openai-agents]`), Hatchet workflows, Claude Code (via hooks), and any agent framework that emits OTel spans.
31
31
 
32
- ![AgentGlow - neural theme](https://raw.githubusercontent.com/Nideesh1/agentglow/main/docs/media/hero.gif)
32
+ ![AgentGlow - neural theme](https://raw.githubusercontent.com/Nideesh1/agentglow/main/docs/media/hero.webp)
33
33
 
34
34
  15 themes:
35
35
 
@@ -5,7 +5,7 @@ born when its span starts, pulses on each LLM call, fires tool/MCP/graph packets
5
5
  when its span ends. Works with LangChain, LangGraph (incl. `langgraph-supervisor`), deepagents, the OpenAI Agents SDK
6
6
  (`agentglow[openai-agents]`), Hatchet workflows, Claude Code (via hooks), and any agent framework that emits OTel spans.
7
7
 
8
- ![AgentGlow - neural theme](https://raw.githubusercontent.com/Nideesh1/agentglow/main/docs/media/hero.gif)
8
+ ![AgentGlow - neural theme](https://raw.githubusercontent.com/Nideesh1/agentglow/main/docs/media/hero.webp)
9
9
 
10
10
  15 themes:
11
11
 
@@ -4,7 +4,7 @@ Point Claude Code's `"type": "http"` hooks at `POST /v1/claude-code` (see exampl
4
4
  becomes `{"kind": "start"|"end", "span": {...}}` items (the `/v1/live` shape), shaped to hit the mapper's rules:
5
5
 
6
6
  - One user prompt = one run (`agentglow.run.id` = `<session>:<n>`, workflow `claude-code`). The topic is the neutral
7
- label `Claude Code · <cwd basename>`, never the prompt: payloads go through `scrub.scrub_hook` first (no prompt,
7
+ label `Claude Code · <cwd basename> · <session id> · <HH:MM>`, never the prompt: payloads go through `scrub.scrub_hook` first (no prompt,
8
8
  no identity keys, secrets redacted).
9
9
  - Main agent = agent span `claude` (`agentglow.agent`), opened on UserPromptSubmit, closed on Stop
10
10
  (`last_assistant_message` → `agentglow.final`).
@@ -36,6 +36,7 @@ from __future__ import annotations
36
36
  import json
37
37
  import os
38
38
  import re
39
+ import time
39
40
  from collections import OrderedDict
40
41
  from dataclasses import dataclass, field
41
42
  from typing import Any
@@ -53,9 +54,19 @@ GRACE_MS = 8000 # main agent outlives its Stop while background subagents run,
53
54
  SOURCE_RE = re.compile(r"^agent\.(?:builtin|custom|plugin)\.(.+)$")
54
55
 
55
56
 
56
- def run_label(cwd: Any) -> str:
57
+ def run_label(cwd: Any, session: Any = "", ts_ms: int = 0) -> str:
58
+ """Neutral run topic, never the prompt: `Claude Code · <cwd basename> · <session short id> · <HH:MM>`, so several
59
+ concurrent sessions in the same folder stay distinguishable."""
57
60
  base = os.path.basename(str(cwd or "").rstrip("/\\"))
58
- return f"Claude Code · {base}" if base else "Claude Code"
61
+ parts = ["Claude Code"]
62
+ if base:
63
+ parts.append(base)
64
+ sid = re.sub(r"[^0-9A-Za-z]", "", str(session or ""))[:4]
65
+ if sid:
66
+ parts.append(sid)
67
+ if ts_ms:
68
+ parts.append(time.strftime("%H:%M", time.localtime(ts_ms / 1000)))
69
+ return " · ".join(parts)
59
70
 
60
71
 
61
72
  def _hex(n: int) -> str:
@@ -381,7 +392,7 @@ class ClaudeCodeAdapter:
381
392
  s.n += 1
382
393
  turn = s.turn = _Turn(f"{s.id}:{s.n}", _hex(16), start=now, traced=s.traces)
383
394
  s.turns = (s.turns + [turn])[-8:]
384
- topic = run_label(s.cwd)
395
+ topic = run_label(s.cwd, s.id, now)
385
396
  span = self._span(turn, None, "claude", now, {
386
397
  "agentglow.agent": "claude", "agentglow.run.id": turn.run_id, "agentglow.run.topic": topic,
387
398
  "agentglow.run.workflow": "claude-code", "agentglow.claude_code.session": s.id})
@@ -566,7 +577,7 @@ class ClaudeCodeAdapter:
566
577
  if ct is None:
567
578
  run_id = f"{sid}:{tr[:8]}" if sid else tr
568
579
  main = self._live(out, tr, _hex(8), None, "claude", t0, None, {
569
- "agentglow.agent": "claude", "agentglow.run.id": run_id, "agentglow.run.topic": run_label(""),
580
+ "agentglow.agent": "claude", "agentglow.run.id": run_id, "agentglow.run.topic": run_label("", sid, t0),
570
581
  "agentglow.run.workflow": "claude-code", "agentglow.claude_code.session": sid})
571
582
  ct = self.ctraces[tr] = _CT(run_id, main, now)
572
583
  ct.last = now
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "agentglow"
3
- version = "0.2.2"
3
+ version = "0.2.4"
4
4
  description = "Live 3D views of agent systems, driven only by OpenTelemetry spans"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes