Swadhin Biswas feat: implement mervelas cli engine, built-in tools, and reactive UI · 4/3/2026
0358986
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import { randomUUID, type UUID } from 'crypto'
import { validateUuid } from './uuid.js'
export type ParsedSessionUrl = {
sessionId: UUID
ingressUrl: string | null
isUrl: boolean
jsonlFile: string | null
isJsonlFile: boolean
}
/**
* Parses a session resume identifier which can be either:
* - A URL containing session ID (e.g., https://api.example.com/v1/session_ingress/session/550e8400-e29b-41d4-a716-446655440000)
* - A plain session ID (UUID)
*
* @param resumeIdentifier - The URL or session ID to parse
* @returns Parsed session information or null if invalid
*/
export function parseSessionIdentifier(
resumeIdentifier: string,
): ParsedSessionUrl | null {
// Check for JSONL file path before URL parsing, since Windows absolute
// paths (e.g., C:\path\file.jsonl) are parsed as valid URLs with C: as protocol
if (resumeIdentifier.toLowerCase().endsWith('.jsonl')) {
return {
sessionId: randomUUID() as UUID,
ingressUrl: null,
isUrl: false,
jsonlFile: resumeIdentifier,
isJsonlFile: true,
}
}
// Check if it's a plain UUID
if (validateUuid(resumeIdentifier)) {
return {
sessionId: resumeIdentifier as UUID,
ingressUrl: null,
isUrl: false,
jsonlFile: null,
isJsonlFile: false,
}
}
// Check if it's a URL
try {
const url = new URL(resumeIdentifier)
// Use the entire URL as the ingress URL
// Always generate a random session ID
return {
sessionId: randomUUID() as UUID,
ingressUrl: url.href,
isUrl: true,
jsonlFile: null,
isJsonlFile: false,
}
} catch {
// Not a valid URL
}
return null
}