feat(pi): add session resume shorthand (#113)

This commit is contained in:
banteg
2026-01-13 05:42:17 +04:00
committed by GitHub
parent c1205cd5a8
commit d4aad8e068
6 changed files with 198 additions and 18 deletions
+2 -2
View File
@@ -45,7 +45,7 @@ The core handler module containing:
**Key patterns:**
- Progress edits are best-effort and only run when new events arrive (Telegram outbox handles rate limiting/coalescing)
- Resume tokens are runner-formatted command lines (e.g., `` `codex resume <token>` ``, `` `claude --resume <token>` ``, `` `pi --session <path>` ``)
- Resume tokens are runner-formatted command lines (e.g., `` `codex resume <token>` ``, `` `claude --resume <token>` ``, `` `pi --session <id>` ``)
- Resume lines are stripped from the prompt before invoking the runner
- Errors/cancellation render final status while preserving resume tokens when known
@@ -356,7 +356,7 @@ transport.send()/edit() final message, delete progress if needed
### Resume Flow
Same as above; auto-router polls all runners to extract resume tokens:
- Router returns first matching token (e.g. `` `claude --resume <id>` `` routes to Claude, `` `pi --session <path>` `` routes to Pi)
- Router returns first matching token (e.g. `` `claude --resume <id>` `` routes to Claude, `` `pi --session <id>` `` routes to Pi)
- Selected runner spawns with resume (e.g. `codex exec --json resume <token> -`, `pi --print --mode json --session <path> <prompt>`)
- Per-token lock serializes concurrent resumes on the same thread
+4 -2
View File
@@ -31,13 +31,15 @@ Provide the **`pi`** engine backend so Takopi can:
Takopi appends a **single backticked** resume line at the end of the message, like:
```text
`pi --session /home/user/.pi/agent/sessions/--repo--/2026-01-02T12-34-56-789Z_abcd.jsonl`
`pi --session ccd569e0`
```
Notes:
* `pi --resume/-r` opens an interactive session picker, so Takopi uses `--session <path>` instead.
* The resume token is the **session file path** (JSONL), treated as an opaque string.
* The resume token is the **session id** (short prefix), derived from the first JSON
object in the session file. If the id cannot be read, Takopi falls back to the
session file path.
* If the path contains spaces, the runner will quote it.
### Non-interactive runs
+3 -2
View File
@@ -30,10 +30,11 @@ Notes:
- Canonical resume line (embedded in chat):
```
`pi --session <path>`
`pi --session <id>`
```
The token is the **session JSONL file path**.
The token is the **short session id**, derived from the first JSON object in the
session file. If the id cannot be read, Takopi falls back to the session file path.
Why not `--resume`?
- `--resume/-r` opens an interactive session picker; it does not accept a
+1 -1
View File
@@ -41,7 +41,7 @@ The canonical ResumeLine embedded in chat MUST be the engines CLI resume comm
- `codex resume <id>`
- `claude --resume <id>`
- `pi --session <path>`
- `pi --session <token>`
ResumeLine MUST resume the interactive session when the engine offers both interactive and headless modes. It MUST NOT point to a headless/batch command that requires a new prompt (e.g., a `run` subcommand that errors without a message).