Skip to content

Commit d149297

Browse files
committed
Fix session ID for claude CLI: convert non-UUID IDs to valid UUIDs
Claude CLI requires session IDs to be valid 36-char UUIDs. The daemon passes run IDs (98 chars) which fail validation. Now validates the ID and generates a fresh UUID if the original isn't UUID-formatted.
1 parent b042e3b commit d149297

3 files changed

Lines changed: 14 additions & 5 deletions

File tree

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/llm-cli-wrapper/src/session/claude/transport.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -289,11 +289,20 @@ fn take_session(session_id: &str) -> Option<oneshot::Sender<()>> {
289289
}
290290

291291
fn configured_claude_session_id(request: &SessionRequest) -> Option<String> {
292-
request
292+
let raw = request
293293
.extras
294294
.pointer("/runtime_contract/cli/session/session_id")
295295
.and_then(serde_json::Value::as_str)
296296
.map(str::trim)
297-
.filter(|value| !value.is_empty())
298-
.map(ToString::to_string)
297+
.filter(|value| !value.is_empty())?;
298+
299+
// Claude CLI requires a valid UUID (36 chars with dashes).
300+
// If the session ID is already a valid UUID, use it directly.
301+
if Uuid::parse_str(raw).is_ok() {
302+
return Some(raw.to_string());
303+
}
304+
305+
// Otherwise, generate a fresh UUID for this session.
306+
// Session resume won't work across restarts, but the session will start cleanly.
307+
Some(Uuid::new_v4().to_string())
299308
}

crates/orchestrator-cli/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "orchestrator-cli"
3-
version = "0.2.9"
3+
version = "0.2.10"
44
edition = "2021"
55

66
[[bin]]

0 commit comments

Comments
 (0)