context-forge-cli 0.4.3__tar.gz → 0.4.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 (57) hide show
  1. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/PKG-INFO +1 -1
  2. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/tui/widgets/tokens_panel.py +11 -11
  3. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/pyproject.toml +1 -1
  4. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/.contextforge.toml +0 -0
  5. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/.github/workflows/publish.yml +0 -0
  6. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/.gitignore +0 -0
  7. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/.python-version +0 -0
  8. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/AGENTS.md +0 -0
  9. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/PLAN.md +0 -0
  10. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/README.md +0 -0
  11. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/__init__.py +0 -0
  12. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/adapters/__init__.py +0 -0
  13. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/adapters/altimate_code.py +0 -0
  14. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/adapters/base.py +0 -0
  15. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/adapters/claude_code.py +0 -0
  16. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/adapters/claude_desktop.py +0 -0
  17. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/adapters/codex.py +0 -0
  18. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/adapters/gemini.py +0 -0
  19. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/adapters/registry.py +0 -0
  20. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/cli.py +0 -0
  21. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/core/__init__.py +0 -0
  22. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/core/analytics.py +0 -0
  23. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/core/compactor.py +0 -0
  24. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/core/db.py +0 -0
  25. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/core/injector.py +0 -0
  26. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/core/scanner.py +0 -0
  27. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/core/summarizer.py +0 -0
  28. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/core/token_analyzer.py +0 -0
  29. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/mcp_server.py +0 -0
  30. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/models/__init__.py +0 -0
  31. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/models/config.py +0 -0
  32. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/models/session.py +0 -0
  33. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/tui/__init__.py +0 -0
  34. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/tui/app.py +0 -0
  35. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/tui/styles.tcss +0 -0
  36. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/tui/widgets/__init__.py +0 -0
  37. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/tui/widgets/session_detail.py +0 -0
  38. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/tui/widgets/session_table.py +0 -0
  39. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/tui/widgets/stats_panel.py +0 -0
  40. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/tui/widgets/status_bar.py +0 -0
  41. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/tui/widgets/transfer_panel.py +0 -0
  42. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/utils/__init__.py +0 -0
  43. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/utils/display.py +0 -0
  44. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/contextforge/utils/tokens.py +0 -0
  45. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/tests/__init__.py +0 -0
  46. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/tests/adapters/__init__.py +0 -0
  47. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/tests/adapters/test_claude_code.py +0 -0
  48. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/tests/conftest.py +0 -0
  49. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/tests/core/__init__.py +0 -0
  50. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/tests/core/test_compactor.py +0 -0
  51. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/tests/core/test_db.py +0 -0
  52. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/tests/core/test_injector.py +0 -0
  53. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/tests/core/test_summarizer.py +0 -0
  54. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/tests/core/test_token_analyzer.py +0 -0
  55. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/tests/fixtures/claude_session_sample.jsonl +0 -0
  56. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/tests/test_mcp_server.py +0 -0
  57. {context_forge_cli-0.4.3 → context_forge_cli-0.4.4}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: context-forge-cli
3
- Version: 0.4.3
3
+ Version: 0.4.4
4
4
  Summary: Session manager and context bridge for agentic CLI tools
5
5
  Project-URL: Homepage, https://github.com/emmver/contextforge
6
6
  Project-URL: Repository, https://github.com/emmver/contextforge
@@ -4,7 +4,7 @@ from __future__ import annotations
4
4
  import json
5
5
  from pathlib import Path
6
6
 
7
- from rich.markup import escape
7
+ from rich.text import Text
8
8
  from textual.app import ComposeResult
9
9
  from textual.binding import Binding
10
10
  from textual.containers import ScrollableContainer, Vertical
@@ -94,16 +94,16 @@ class TurnDetailPanel(ModalScreen):
94
94
  + (f" [magenta]{len(msg.tool_results)} result(s)[/magenta]" if msg.tool_results else "")
95
95
  )
96
96
 
97
- parts: list[str] = []
97
+ body = Text()
98
98
 
99
99
  # ── Text content ────────────────────────────────────────────────────
100
100
  if msg.content:
101
- parts.append("[bold dim]── Content ──[/bold dim]")
102
- parts.append(escape(msg.content))
101
+ body.append("── Content ──\n", style="bold dim")
102
+ body.append(msg.content + "\n")
103
103
 
104
104
  # ── Tool calls ──────────────────────────────────────────────────────
105
105
  if msg.tool_calls:
106
- parts.append("\n[bold dim]── Tool Calls ──[/bold dim]")
106
+ body.append("\n── Tool Calls ──\n", style="bold dim")
107
107
  for i, tc in enumerate(msg.tool_calls, 1):
108
108
  name = tc.get("name", "?")
109
109
  raw_input = tc.get("input", "")
@@ -111,20 +111,20 @@ class TurnDetailPanel(ModalScreen):
111
111
  formatted = json.dumps(json.loads(raw_input), indent=2)
112
112
  except (json.JSONDecodeError, TypeError):
113
113
  formatted = raw_input if isinstance(raw_input, str) else str(raw_input)
114
- parts.append(f"[bold yellow]{i}. {escape(name)}[/bold yellow]")
115
- parts.append(f"[dim]{escape(formatted)}[/dim]")
114
+ body.append(f"{i}. {name}\n", style="bold yellow")
115
+ body.append(formatted + "\n", style="dim")
116
116
 
117
117
  # ── Tool results ────────────────────────────────────────────────────
118
118
  if msg.tool_results:
119
- parts.append("\n[bold dim]── Tool Results ──[/bold dim]")
119
+ body.append("\n── Tool Results ──\n", style="bold dim")
120
120
  for i, tr in enumerate(msg.tool_results, 1):
121
121
  output = tr.get("output", "")
122
122
  if not isinstance(output, str):
123
123
  output = str(output)
124
- parts.append(f"[bold green]Result {i}[/bold green]")
125
- parts.append(f"[dim]{escape(output)}[/dim]")
124
+ body.append(f"Result {i}\n", style="bold green")
125
+ body.append(output + "\n", style="dim")
126
126
 
127
- self.query_one("#turn-body", Static).update("\n".join(parts))
127
+ self.query_one("#turn-body", Static).update(body)
128
128
 
129
129
 
130
130
  class TokensPanel(ModalScreen):
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "context-forge-cli"
3
- version = "0.4.3"
3
+ version = "0.4.4"
4
4
  description = "Session manager and context bridge for agentic CLI tools"
5
5
  readme = "README.md"
6
6
  license = { text = "MIT" }