Feat/intake conversation resume#37
Merged
Merged
Conversation
The intake REPL (`arbor` with no subcommand) is a planning chat held before a research run is launched. Until now it lived only in memory: quit before launching and it was gone, so there was nothing to resume — only launched runs under .arbor/sessions/ were ever persisted. Auto-save the conversation every turn under <cwd>/.arbor/conversations/<conv_id>/ (messages.jsonl + meta.json), reusing the same atomic JSONL message IO as run checkpoints. Add two ways back in: - `arbor --continue` / `-C`: reload the newest unfinished conversation and keep chatting (like `claude -c`). `-c` is already `--config`, so the short flag is `-C`. - `/resume` inside intake now lists saved conversations alongside launched runs; picking a conversation reloads it into the live agent, picking a run replays the orchestrator as before. On resume (both paths) the prior exchange is replayed to the terminal so you can see the previous conversation, not just silently inherit its context. A conversation is marked `launched` once it fires LaunchExperiment (the run's own checkpoint takes over) and is then excluded from --continue. Saves are best-effort: a failure logs and never breaks the chat. New module src/cli/intake/conversation_store.py with full unit tests, plus integration tests driving run_intake with the LLM call and input stubbed.
Add an "Outputs & Resume" section (EN + zh) covering the per-turn autosave under .arbor/conversations/, `arbor --continue` / `-C`, and the extended `/resume` that lists saved conversations alongside runs. Add an `arbor --continue` row to both README command tables.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary / 概述
The intake REPL (
arborwith no subcommand) is a planning chat held before arun is launched. It lived only in memory: quit before launching and it was gone,
so there was nothing to
/resume— only launched runs under.arbor/sessions/were ever persisted. This PR gives the conversation itself the same durability.
<cwd>/.arbor/conversations/<conv_id>/(
messages.jsonl+meta.json), reusing the checkpoint contract's atomicJSONL IO. Best-effort — a failure logs and never breaks the chat.
arbor --continue/-C: reload the newest unfinished conversation and keepchatting (like
claude -c).-cis already--config, so the short flag is-C./resumenow lists saved conversations (tagged[chat]) alongside launchedruns; a conversation reloads into the live agent, a run replays the orchestrator.
launchedonce it firesLaunchExperimentand isthen excluded from
--continue(the run's own checkpoint takes over).New module
src/cli/intake/conversation_store.pywith full unit tests, plusintegration tests driving
run_intakewith the LLM call and input stubbed.Docs (
outputs-and-resumeEN+zh) and both README command tables updated.Linked issue / 关联 issue
Closes #36
Type of change / 改动类型
fix)feat)docs)refactor)test)chore)How was this tested? / 如何验证?
Checklist / 检查清单
fix(config): ...). / PR 标题遵循 Conventional Commits 规范。python tests/test_*.py) and they pass. / 我已在本地运行相关测试并通过。README.zh-CN.md)。