agent-session-bridge 0.2.2__tar.gz → 0.2.3__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.
- {agent_session_bridge-0.2.2/src/agent_session_bridge.egg-info → agent_session_bridge-0.2.3}/PKG-INFO +1 -1
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/pyproject.toml +1 -1
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3/src/agent_session_bridge.egg-info}/PKG-INFO +1 -1
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/writers/codex.py +28 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_codex_db.py +13 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/LICENSE +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/README.md +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/setup.cfg +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/agent_session_bridge.egg-info/SOURCES.txt +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/agent_session_bridge.egg-info/dependency_links.txt +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/agent_session_bridge.egg-info/entry_points.txt +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/agent_session_bridge.egg-info/requires.txt +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/agent_session_bridge.egg-info/top_level.txt +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/__init__.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/_ids.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/cli.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/convert.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/handshake.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/ir.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/place.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/readers/__init__.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/readers/_content.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/readers/_jsonl.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/readers/_pending.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/readers/claude_code.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/readers/codex.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/readers/hermes.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/skill_install.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/skills/session-handoff/SKILL.md +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/tui/__init__.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/tui/actions.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/tui/app.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/tui/discovery.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/tui/options.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/tui/register.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/tui/screens.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/tui/summary.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/writers/__init__.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/writers/_common.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/writers/claude_code.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/writers/codex_db.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/writers/hermes.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/writers/hermes_db.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_claude_reader.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_cli_tui.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_codex_reader.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_handshake_convert_cli.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_hermes_db.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_hermes_reader.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_ir.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_place.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_fixes.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round11_fixes.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round12_fixes.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round13_fixes.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round14_fixes.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round16_fixes.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round17_fixes.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round18_fixes.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round18b_fixes.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round1_fixes.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round21_fixes.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round22_fixes.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round25_fixes.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round27_fixes.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round28_fixes.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round2_fixes.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round3_fixes.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round4_fixes.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round5_fixes.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round6_fixes.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round7_fixes.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round8_fixes.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round9_fixes.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_skill_install.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_stub_open_calls.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_tui_actions.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_tui_discovery.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_tui_options.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_tui_pilot.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_tui_register.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_tui_summary.py +0 -0
- {agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_writers.py +0 -0
{agent_session_bridge-0.2.2/src/agent_session_bridge.egg-info → agent_session_bridge-0.2.3}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-session-bridge
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.3
|
|
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
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "agent-session-bridge"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.3"
|
|
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"
|
{agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3/src/agent_session_bridge.egg-info}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-session-bridge
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.3
|
|
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
|
{agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/writers/codex.py
RENAMED
|
@@ -23,6 +23,16 @@ def _codex_role(role: Role) -> str:
|
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
def _msg_payload(role: str, text: str) -> dict[str, Any]:
|
|
26
|
+
if role == "assistant":
|
|
27
|
+
# Codex's history reconstruction keeps assistant messages by channel
|
|
28
|
+
# phase; without this the resumed model sees only the user turns.
|
|
29
|
+
block_type = "output_text"
|
|
30
|
+
return {
|
|
31
|
+
"type": "message",
|
|
32
|
+
"role": role,
|
|
33
|
+
"content": [{"type": block_type, "text": text}],
|
|
34
|
+
"phase": "final_answer",
|
|
35
|
+
}
|
|
26
36
|
# Assistant emits output_text; user/system emit input_text.
|
|
27
37
|
block_type = "output_text" if role == "assistant" else "input_text"
|
|
28
38
|
return {"type": "message", "role": role, "content": [{"type": block_type, "text": text}]}
|
|
@@ -173,5 +183,23 @@ def write_codex(
|
|
|
173
183
|
},
|
|
174
184
|
}
|
|
175
185
|
)
|
|
186
|
+
elif msg.role is Role.ASSISTANT:
|
|
187
|
+
# Same twin discipline for assistant turns: the transcript view
|
|
188
|
+
# renders from event_msg records, so without agent_message events
|
|
189
|
+
# a resumed session displays as user-messages-only.
|
|
190
|
+
assistant_text = msg.text()
|
|
191
|
+
if assistant_text.strip():
|
|
192
|
+
records.append(
|
|
193
|
+
{
|
|
194
|
+
"timestamp": ts,
|
|
195
|
+
"type": "event_msg",
|
|
196
|
+
"payload": {
|
|
197
|
+
"type": "agent_message",
|
|
198
|
+
"message": assistant_text,
|
|
199
|
+
"phase": "final_answer",
|
|
200
|
+
"memory_citation": None,
|
|
201
|
+
},
|
|
202
|
+
}
|
|
203
|
+
)
|
|
176
204
|
|
|
177
205
|
return records, report
|
|
@@ -343,6 +343,19 @@ def test_registration_matches_native_picker_requirements(tmp_path, monkeypatch):
|
|
|
343
343
|
]
|
|
344
344
|
assert user_events, "picker requires an event_msg user_message in the rollout"
|
|
345
345
|
assert user_events[0]["payload"]["message"].strip()
|
|
346
|
+
agent_events = [
|
|
347
|
+
r for r in records
|
|
348
|
+
if r.get("type") == "event_msg" and r["payload"].get("type") == "agent_message"
|
|
349
|
+
]
|
|
350
|
+
assert agent_events, "transcript rendering requires agent_message events"
|
|
351
|
+
assistant_items = [
|
|
352
|
+
r for r in records
|
|
353
|
+
if r.get("type") == "response_item" and r["payload"].get("type") == "message"
|
|
354
|
+
and r["payload"].get("role") == "assistant"
|
|
355
|
+
]
|
|
356
|
+
assert assistant_items and all(
|
|
357
|
+
i["payload"].get("phase") == "final_answer" for i in assistant_items
|
|
358
|
+
), "history reconstruction drops assistant messages without a phase"
|
|
346
359
|
conn = sqlite3.connect(home / "state_5.sqlite")
|
|
347
360
|
row = dict(zip([c[0] for c in conn.execute("SELECT model, first_user_message, preview, cli_version FROM threads").description],
|
|
348
361
|
conn.execute("SELECT model, first_user_message, preview, cli_version FROM threads").fetchone()))
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/readers/__init__.py
RENAMED
|
File without changes
|
{agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/readers/_content.py
RENAMED
|
File without changes
|
{agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/readers/_jsonl.py
RENAMED
|
File without changes
|
{agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/readers/_pending.py
RENAMED
|
File without changes
|
{agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/readers/claude_code.py
RENAMED
|
File without changes
|
{agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/readers/codex.py
RENAMED
|
File without changes
|
{agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/readers/hermes.py
RENAMED
|
File without changes
|
{agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/skill_install.py
RENAMED
|
File without changes
|
|
File without changes
|
{agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/tui/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/tui/discovery.py
RENAMED
|
File without changes
|
|
File without changes
|
{agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/tui/register.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/writers/__init__.py
RENAMED
|
File without changes
|
{agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/writers/_common.py
RENAMED
|
File without changes
|
{agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/writers/claude_code.py
RENAMED
|
File without changes
|
{agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/writers/codex_db.py
RENAMED
|
File without changes
|
{agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/writers/hermes.py
RENAMED
|
File without changes
|
{agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/src/session_bridge/writers/hermes_db.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_handshake_convert_cli.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round11_fixes.py
RENAMED
|
File without changes
|
{agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round12_fixes.py
RENAMED
|
File without changes
|
{agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round13_fixes.py
RENAMED
|
File without changes
|
{agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round14_fixes.py
RENAMED
|
File without changes
|
{agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round16_fixes.py
RENAMED
|
File without changes
|
{agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round17_fixes.py
RENAMED
|
File without changes
|
{agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round18_fixes.py
RENAMED
|
File without changes
|
{agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round18b_fixes.py
RENAMED
|
File without changes
|
|
File without changes
|
{agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round21_fixes.py
RENAMED
|
File without changes
|
{agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round22_fixes.py
RENAMED
|
File without changes
|
{agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round25_fixes.py
RENAMED
|
File without changes
|
{agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round27_fixes.py
RENAMED
|
File without changes
|
{agent_session_bridge-0.2.2 → agent_session_bridge-0.2.3}/tests/test_review_round28_fixes.py
RENAMED
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|