agent-session-bridge 0.2.0__tar.gz → 0.2.1__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 (83) hide show
  1. {agent_session_bridge-0.2.0/src/agent_session_bridge.egg-info → agent_session_bridge-0.2.1}/PKG-INFO +9 -8
  2. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/README.md +5 -4
  3. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/pyproject.toml +4 -4
  4. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1/src/agent_session_bridge.egg-info}/PKG-INFO +9 -8
  5. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/session_bridge/tui/screens.py +21 -2
  6. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_tui_pilot.py +4 -0
  7. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/LICENSE +0 -0
  8. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/setup.cfg +0 -0
  9. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/agent_session_bridge.egg-info/SOURCES.txt +0 -0
  10. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/agent_session_bridge.egg-info/dependency_links.txt +0 -0
  11. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/agent_session_bridge.egg-info/entry_points.txt +0 -0
  12. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/agent_session_bridge.egg-info/requires.txt +0 -0
  13. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/agent_session_bridge.egg-info/top_level.txt +0 -0
  14. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/session_bridge/__init__.py +0 -0
  15. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/session_bridge/_ids.py +0 -0
  16. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/session_bridge/cli.py +0 -0
  17. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/session_bridge/convert.py +0 -0
  18. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/session_bridge/handshake.py +0 -0
  19. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/session_bridge/ir.py +0 -0
  20. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/session_bridge/place.py +0 -0
  21. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/session_bridge/readers/__init__.py +0 -0
  22. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/session_bridge/readers/_content.py +0 -0
  23. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/session_bridge/readers/_jsonl.py +0 -0
  24. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/session_bridge/readers/_pending.py +0 -0
  25. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/session_bridge/readers/claude_code.py +0 -0
  26. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/session_bridge/readers/codex.py +0 -0
  27. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/session_bridge/readers/hermes.py +0 -0
  28. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/session_bridge/skill_install.py +0 -0
  29. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/session_bridge/skills/session-handoff/SKILL.md +0 -0
  30. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/session_bridge/tui/__init__.py +0 -0
  31. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/session_bridge/tui/actions.py +0 -0
  32. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/session_bridge/tui/app.py +0 -0
  33. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/session_bridge/tui/discovery.py +0 -0
  34. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/session_bridge/tui/options.py +0 -0
  35. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/session_bridge/tui/register.py +0 -0
  36. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/session_bridge/tui/summary.py +0 -0
  37. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/session_bridge/writers/__init__.py +0 -0
  38. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/session_bridge/writers/_common.py +0 -0
  39. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/session_bridge/writers/claude_code.py +0 -0
  40. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/session_bridge/writers/codex.py +0 -0
  41. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/session_bridge/writers/codex_db.py +0 -0
  42. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/session_bridge/writers/hermes.py +0 -0
  43. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/src/session_bridge/writers/hermes_db.py +0 -0
  44. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_claude_reader.py +0 -0
  45. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_cli_tui.py +0 -0
  46. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_codex_db.py +0 -0
  47. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_codex_reader.py +0 -0
  48. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_handshake_convert_cli.py +0 -0
  49. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_hermes_db.py +0 -0
  50. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_hermes_reader.py +0 -0
  51. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_ir.py +0 -0
  52. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_place.py +0 -0
  53. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_review_fixes.py +0 -0
  54. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_review_round11_fixes.py +0 -0
  55. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_review_round12_fixes.py +0 -0
  56. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_review_round13_fixes.py +0 -0
  57. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_review_round14_fixes.py +0 -0
  58. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_review_round16_fixes.py +0 -0
  59. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_review_round17_fixes.py +0 -0
  60. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_review_round18_fixes.py +0 -0
  61. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_review_round18b_fixes.py +0 -0
  62. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_review_round1_fixes.py +0 -0
  63. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_review_round21_fixes.py +0 -0
  64. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_review_round22_fixes.py +0 -0
  65. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_review_round25_fixes.py +0 -0
  66. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_review_round27_fixes.py +0 -0
  67. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_review_round28_fixes.py +0 -0
  68. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_review_round2_fixes.py +0 -0
  69. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_review_round3_fixes.py +0 -0
  70. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_review_round4_fixes.py +0 -0
  71. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_review_round5_fixes.py +0 -0
  72. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_review_round6_fixes.py +0 -0
  73. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_review_round7_fixes.py +0 -0
  74. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_review_round8_fixes.py +0 -0
  75. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_review_round9_fixes.py +0 -0
  76. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_skill_install.py +0 -0
  77. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_stub_open_calls.py +0 -0
  78. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_tui_actions.py +0 -0
  79. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_tui_discovery.py +0 -0
  80. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_tui_options.py +0 -0
  81. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_tui_register.py +0 -0
  82. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_tui_summary.py +0 -0
  83. {agent_session_bridge-0.2.0 → agent_session_bridge-0.2.1}/tests/test_writers.py +0 -0
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-session-bridge
3
- Version: 0.2.0
3
+ Version: 0.2.1
4
4
  Summary: Local-first cross-harness agent-session portability: export a live coding-agent session from one harness and resume it in another.
5
5
  Author: Prakash Chaudhary
6
6
  License: MIT
7
- Project-URL: Homepage, https://github.com/connectwithprakash/session-bridge
8
- Project-URL: Repository, https://github.com/connectwithprakash/session-bridge
9
- Project-URL: Changelog, https://github.com/connectwithprakash/session-bridge/blob/main/CHANGELOG.md
7
+ Project-URL: Homepage, https://github.com/connectwithprakash/agent-session-bridge
8
+ Project-URL: Repository, https://github.com/connectwithprakash/agent-session-bridge
9
+ Project-URL: Changelog, https://github.com/connectwithprakash/agent-session-bridge/blob/main/CHANGELOG.md
10
10
  Project-URL: Project page, https://www.connectwithprakash.com/project/session-bridge
11
11
  Keywords: ai-agents,claude-code,codex,session,cli,tui
12
12
  Classifier: Development Status :: 4 - Beta
@@ -31,7 +31,7 @@ Dynamic: license-file
31
31
 
32
32
  # session-bridge
33
33
 
34
- [![test](https://github.com/connectwithprakash/session-bridge/actions/workflows/test.yml/badge.svg)](https://github.com/connectwithprakash/session-bridge/actions/workflows/test.yml)
34
+ [![test](https://github.com/connectwithprakash/agent-session-bridge/actions/workflows/test.yml/badge.svg)](https://github.com/connectwithprakash/agent-session-bridge/actions/workflows/test.yml)
35
35
  [![PyPI](https://img.shields.io/pypi/v/agent-session-bridge)](https://pypi.org/project/agent-session-bridge/)
36
36
  [![Python](https://img.shields.io/pypi/pyversions/agent-session-bridge)](https://pypi.org/project/agent-session-bridge/)
37
37
  [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
@@ -98,9 +98,10 @@ source.jsonl ─▶ reader ─▶ IR (Session: messages, tools, pending) ─▶
98
98
  ## Install
99
99
 
100
100
  ```bash
101
- uv tool install 'agent-session-bridge[tui]' # recommended: CLI + TUI, isolated env
102
- uvx agent-session-bridge --help # or: no-install run
103
- pip install 'agent-session-bridge[tui]' # or: plain pip
101
+ uv tool install 'agent-session-bridge[tui]' # recommended: CLI + TUI, isolated env
102
+ brew install connectwithprakash/tap/session-bridge # or: Homebrew (TUI included)
103
+ uvx agent-session-bridge --help # or: no-install run
104
+ pip install 'agent-session-bridge[tui]' # or: plain pip
104
105
  ```
105
106
 
106
107
  Installs the `session-bridge` command (docs use that name); an
@@ -1,6 +1,6 @@
1
1
  # session-bridge
2
2
 
3
- [![test](https://github.com/connectwithprakash/session-bridge/actions/workflows/test.yml/badge.svg)](https://github.com/connectwithprakash/session-bridge/actions/workflows/test.yml)
3
+ [![test](https://github.com/connectwithprakash/agent-session-bridge/actions/workflows/test.yml/badge.svg)](https://github.com/connectwithprakash/agent-session-bridge/actions/workflows/test.yml)
4
4
  [![PyPI](https://img.shields.io/pypi/v/agent-session-bridge)](https://pypi.org/project/agent-session-bridge/)
5
5
  [![Python](https://img.shields.io/pypi/pyversions/agent-session-bridge)](https://pypi.org/project/agent-session-bridge/)
6
6
  [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
@@ -67,9 +67,10 @@ source.jsonl ─▶ reader ─▶ IR (Session: messages, tools, pending) ─▶
67
67
  ## Install
68
68
 
69
69
  ```bash
70
- uv tool install 'agent-session-bridge[tui]' # recommended: CLI + TUI, isolated env
71
- uvx agent-session-bridge --help # or: no-install run
72
- pip install 'agent-session-bridge[tui]' # or: plain pip
70
+ uv tool install 'agent-session-bridge[tui]' # recommended: CLI + TUI, isolated env
71
+ brew install connectwithprakash/tap/session-bridge # or: Homebrew (TUI included)
72
+ uvx agent-session-bridge --help # or: no-install run
73
+ pip install 'agent-session-bridge[tui]' # or: plain pip
73
74
  ```
74
75
 
75
76
  Installs the `session-bridge` command (docs use that name); an
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "agent-session-bridge"
7
- version = "0.2.0"
7
+ version = "0.2.1"
8
8
  description = "Local-first cross-harness agent-session portability: export a live coding-agent session from one harness and resume it in another."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -27,9 +27,9 @@ classifiers = [
27
27
  dependencies = []
28
28
 
29
29
  [project.urls]
30
- Homepage = "https://github.com/connectwithprakash/session-bridge"
31
- Repository = "https://github.com/connectwithprakash/session-bridge"
32
- Changelog = "https://github.com/connectwithprakash/session-bridge/blob/main/CHANGELOG.md"
30
+ Homepage = "https://github.com/connectwithprakash/agent-session-bridge"
31
+ Repository = "https://github.com/connectwithprakash/agent-session-bridge"
32
+ Changelog = "https://github.com/connectwithprakash/agent-session-bridge/blob/main/CHANGELOG.md"
33
33
  "Project page" = "https://www.connectwithprakash.com/project/session-bridge"
34
34
 
35
35
  [project.optional-dependencies]
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-session-bridge
3
- Version: 0.2.0
3
+ Version: 0.2.1
4
4
  Summary: Local-first cross-harness agent-session portability: export a live coding-agent session from one harness and resume it in another.
5
5
  Author: Prakash Chaudhary
6
6
  License: MIT
7
- Project-URL: Homepage, https://github.com/connectwithprakash/session-bridge
8
- Project-URL: Repository, https://github.com/connectwithprakash/session-bridge
9
- Project-URL: Changelog, https://github.com/connectwithprakash/session-bridge/blob/main/CHANGELOG.md
7
+ Project-URL: Homepage, https://github.com/connectwithprakash/agent-session-bridge
8
+ Project-URL: Repository, https://github.com/connectwithprakash/agent-session-bridge
9
+ Project-URL: Changelog, https://github.com/connectwithprakash/agent-session-bridge/blob/main/CHANGELOG.md
10
10
  Project-URL: Project page, https://www.connectwithprakash.com/project/session-bridge
11
11
  Keywords: ai-agents,claude-code,codex,session,cli,tui
12
12
  Classifier: Development Status :: 4 - Beta
@@ -31,7 +31,7 @@ Dynamic: license-file
31
31
 
32
32
  # session-bridge
33
33
 
34
- [![test](https://github.com/connectwithprakash/session-bridge/actions/workflows/test.yml/badge.svg)](https://github.com/connectwithprakash/session-bridge/actions/workflows/test.yml)
34
+ [![test](https://github.com/connectwithprakash/agent-session-bridge/actions/workflows/test.yml/badge.svg)](https://github.com/connectwithprakash/agent-session-bridge/actions/workflows/test.yml)
35
35
  [![PyPI](https://img.shields.io/pypi/v/agent-session-bridge)](https://pypi.org/project/agent-session-bridge/)
36
36
  [![Python](https://img.shields.io/pypi/pyversions/agent-session-bridge)](https://pypi.org/project/agent-session-bridge/)
37
37
  [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
@@ -98,9 +98,10 @@ source.jsonl ─▶ reader ─▶ IR (Session: messages, tools, pending) ─▶
98
98
  ## Install
99
99
 
100
100
  ```bash
101
- uv tool install 'agent-session-bridge[tui]' # recommended: CLI + TUI, isolated env
102
- uvx agent-session-bridge --help # or: no-install run
103
- pip install 'agent-session-bridge[tui]' # or: plain pip
101
+ uv tool install 'agent-session-bridge[tui]' # recommended: CLI + TUI, isolated env
102
+ brew install connectwithprakash/tap/session-bridge # or: Homebrew (TUI included)
103
+ uvx agent-session-bridge --help # or: no-install run
104
+ pip install 'agent-session-bridge[tui]' # or: plain pip
104
105
  ```
105
106
 
106
107
  Installs the `session-bridge` command (docs use that name); an
@@ -399,7 +399,9 @@ class DryRunScreen(Screen):
399
399
  self.opts,
400
400
  claude_home=getattr(self.app, "claude_home", None),
401
401
  )
402
- self.app.call_from_thread(self.app.push_screen, ResultScreen(outcome))
402
+ self.app.call_from_thread(
403
+ self.app.push_screen, ResultScreen(outcome, target=self.opts.target)
404
+ )
403
405
 
404
406
 
405
407
  class ResultScreen(Screen):
@@ -410,9 +412,10 @@ class ResultScreen(Screen):
410
412
  ("q", "quit", "Quit"),
411
413
  ]
412
414
 
413
- def __init__(self, outcome) -> None:
415
+ def __init__(self, outcome, target: str | None = None) -> None:
414
416
  super().__init__()
415
417
  self.outcome = outcome
418
+ self.target = target
416
419
 
417
420
  def compose(self) -> ComposeResult:
418
421
  yield Header()
@@ -435,6 +438,22 @@ class ResultScreen(Screen):
435
438
  lines.append(f"\n[b]resume with:[/] {escape(o.resume_hint)}")
436
439
  if o.error:
437
440
  lines.append(f"\n[b red]error:[/] {escape(o.error)}")
441
+ # A converted file alone is not resumable in every harness; say so
442
+ # here, where the user is about to go looking for their session.
443
+ if not o.error and not o.placed_path:
444
+ if self.target in ("codex", "hermes"):
445
+ lines.append(
446
+ f"\n[yellow]heads up:[/] {self.target} lists sessions from its own "
447
+ f"store, so this file will NOT appear in its resume picker. "
448
+ f"To make it resumable, use Register ([b]g[/] on the summary "
449
+ f"screen) instead."
450
+ )
451
+ elif self.target == "claude-code":
452
+ lines.append(
453
+ "\n[yellow]heads up:[/] `claude --resume` only finds sessions "
454
+ "under ~/.claude/projects. Enable placement on the options "
455
+ "screen to make this resumable."
456
+ )
438
457
  lines.append("\n[dim]n for another conversion, q to quit[/]")
439
458
  return "\n".join(lines)
440
459
 
@@ -138,6 +138,10 @@ def test_convert_flow_end_to_end(tmp_path):
138
138
  assert isinstance(app.screen, ResultScreen)
139
139
  assert app.screen.outcome.error is None
140
140
  assert (out_dir / "converted.jsonl").exists()
141
+ # This flow targets claude-code without placement, so the result
142
+ # screen must warn that the file alone is not resumable.
143
+ body = str(app.screen.query_one("#result-body", Static).render())
144
+ assert "heads up" in body and "Enable placement" in body
141
145
 
142
146
  await pilot.press("n")
143
147
  await pilot.pause(0.2)