ultracontext 1.3.1 → 1.3.2
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.
- package/dist/cli/entry.mjs +3 -3
- package/dist/cli/sdk-daemon.mjs +11 -4
- package/dist/cli/sdk-daemon.mjs.map +1 -1
- package/dist/{ctl-3wE5-uEy.mjs → ctl-BVPu-D57.mjs} +3 -3
- package/dist/{ctl-3wE5-uEy.mjs.map → ctl-BVPu-D57.mjs.map} +1 -1
- package/dist/{launcher-DeTwUGTs.mjs → launcher-BFPi7_wD.mjs} +3 -3
- package/dist/{launcher-DeTwUGTs.mjs.map → launcher-BFPi7_wD.mjs.map} +1 -1
- package/dist/{lock-PqeXMp7P.mjs → lock-CQ3xrIlj.mjs} +2 -2
- package/dist/{lock-PqeXMp7P.mjs.map → lock-CQ3xrIlj.mjs.map} +1 -1
- package/dist/{src-B9CWO5Xk.mjs → src-BSCJv6SU.mjs} +2 -2
- package/dist/{src-B9CWO5Xk.mjs.map → src-BSCJv6SU.mjs.map} +1 -1
- package/dist/{src-B7VNX8_g.mjs → src-DzUz8GPJ.mjs} +85 -8
- package/dist/src-DzUz8GPJ.mjs.map +1 -0
- package/dist/{tui-BmUdW0Nf.mjs → tui-C3H6iRjz.mjs} +4 -4
- package/dist/tui-C3H6iRjz.mjs.map +1 -0
- package/package.json +1 -1
- package/dist/src-B7VNX8_g.mjs.map +0 -1
- package/dist/tui-BmUdW0Nf.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"src-B7VNX8_g.mjs","names":[],"sources":["../../../packages/harness/src/parsers/claude.mjs","../../../packages/harness/src/parsers/codex.mjs","../../../packages/harness/src/parsers/openclaw.mjs","../../../packages/harness/src/writers/claude.mjs","../../../packages/harness/src/writers/codex.mjs"],"sourcesContent":["import {\n extractSessionIdFromPath,\n normalizeRole,\n normalizeWhitespace,\n preserveText,\n safeJsonParse,\n toMessage,\n truncateString,\n} from \"../utils.mjs\";\n\n// format a tool_use block into a readable string\nfunction formatToolUse(item) {\n const name = (item.name ?? \"unknown\").toLowerCase();\n const input = item.input ?? {};\n const filePath = input.file_path ?? input.path ?? \"\";\n\n if (name === \"write\") {\n const content = preserveText(input.content ?? input.file_text ?? \"\");\n return `[Write] ${filePath}\\n${content}`;\n }\n\n if (name === \"edit\") {\n const parts = [`[Edit] ${filePath}`];\n if (input.old_string) parts.push(`- ${preserveText(input.old_string)}`);\n if (input.new_string) parts.push(`+ ${preserveText(input.new_string)}`);\n return parts.join(\"\\n\");\n }\n\n if (name === \"read\") return `[Read] ${filePath}`;\n if (name === \"bash\") return `[Bash] ${preserveText(input.command ?? \"\")}`;\n\n // grep and glob share the same shape\n if (name === \"grep\" || name === \"glob\") {\n const loc = filePath ? ` in ${filePath}` : \"\";\n return `[${item.name}] ${input.pattern ?? \"\"}${loc}`;\n }\n\n // generic fallback\n const compact = JSON.stringify(input);\n return `[${item.name ?? name}] ${compact.length > 500 ? compact.slice(0, 500) + \"...\" : compact}`;\n}\n\n// format a tool_result block into a readable string\nfunction formatToolResult(item) {\n const content = item.content ?? \"\";\n\n if (typeof content === \"string\") {\n const text = preserveText(content);\n return text ? `[result] ${truncateString(text, 1000)}` : \"[result] ok\";\n }\n\n if (Array.isArray(content)) {\n const text = content\n .filter((c) => c?.type === \"text\" && typeof c.text === \"string\")\n .map((c) => preserveText(c.text))\n .filter(Boolean)\n .join(\"\\n\");\n return text ? `[result] ${truncateString(text, 1000)}` : \"[result] ok\";\n }\n\n return \"[result] ok\";\n}\n\n// extract text content from Claude Code's message.content (string, array, or object)\nexport function extractClaudeTextContent(content) {\n if (!content) return \"\";\n if (typeof content === \"string\") return preserveText(content);\n\n if (Array.isArray(content)) {\n const parts = [];\n for (const item of content) {\n if (!item || typeof item !== \"object\") continue;\n if (item.type === \"text\" && typeof item.text === \"string\") {\n const chunk = preserveText(item.text);\n if (chunk) parts.push(chunk);\n }\n if (item.type === \"thinking\" && typeof item.thinking === \"string\") {\n const chunk = preserveText(item.thinking);\n if (chunk) parts.push(`[thinking] ${chunk}`);\n }\n if (item.type === \"tool_use\") parts.push(formatToolUse(item));\n if (item.type === \"tool_result\") parts.push(formatToolResult(item));\n }\n return parts.join(\"\\n\\n\");\n }\n\n if (typeof content === \"object\") {\n if (typeof content.text === \"string\") return preserveText(content.text);\n if (typeof content.content === \"string\") return preserveText(content.content);\n }\n\n return \"\";\n}\n\n// parse a single JSONL line from a Claude Code session file\nexport function parseClaudeCodeLine({ line, filePath }) {\n const parsed = safeJsonParse(line);\n if (!parsed || typeof parsed !== \"object\") return null;\n\n const type = String(parsed.type ?? \"\").toLowerCase();\n const sessionId =\n parsed.sessionId ??\n parsed.session_id ??\n parsed.payload?.sessionId ??\n parsed.payload?.session_id ??\n extractSessionIdFromPath(filePath);\n const timestamp = parsed.timestamp ?? parsed.ts ?? new Date().toISOString();\n\n // summary entries\n if (type === \"summary\") {\n const summary = normalizeWhitespace(parsed.summary);\n if (!summary) return null;\n return {\n sessionId,\n eventType: \"claude.summary\",\n kind: \"system\",\n timestamp,\n message: toMessage(summary),\n raw: parsed,\n };\n }\n\n // file history snapshots\n if (type === \"file-history-snapshot\") {\n const trackedFiles = Object.keys(parsed.snapshot?.trackedFileBackups ?? {}).length;\n const label = parsed.isSnapshotUpdate ? \"File snapshot update\" : \"File snapshot\";\n const message = `${label}: ${trackedFiles} tracked files`;\n return {\n sessionId,\n eventType: \"claude.file_snapshot\",\n kind: \"system\",\n timestamp,\n message: toMessage(message),\n raw: parsed,\n };\n }\n\n // system entries (local_command, stop_hook_summary, turn_duration, etc.)\n if (type === \"system\") {\n const subtype = parsed.subtype ?? \"unknown\";\n let message;\n\n if (subtype === \"local_command\") {\n message = parsed.content ? preserveText(parsed.content) : \"Local command executed\";\n } else if (subtype === \"stop_hook_summary\") {\n message = `Hook summary: ${parsed.hookCount ?? 0} hooks`;\n } else if (subtype === \"turn_duration\") {\n message = `Turn completed in ${parsed.durationMs ?? 0}ms (${parsed.messageCount ?? 0} messages)`;\n } else {\n message = `System event: ${subtype}`;\n }\n\n if (!message) return null;\n return {\n sessionId,\n eventType: `claude.system.${subtype}`,\n kind: \"system\",\n timestamp,\n message: toMessage(message),\n raw: parsed,\n };\n }\n\n // attachment entries (deferred_tools_delta, mcp_instructions_delta, etc.)\n if (type === \"attachment\") {\n const attachmentType = parsed.attachment?.type ?? \"unknown\";\n const parts = [];\n const added = parsed.attachment?.addedNames;\n const removed = parsed.attachment?.removedNames;\n if (Array.isArray(added) && added.length) parts.push(`added: ${added.join(\", \")}`);\n if (Array.isArray(removed) && removed.length) parts.push(`removed: ${removed.join(\", \")}`);\n const detail = parts.length ? ` (${parts.join(\"; \")})` : \"\";\n return {\n sessionId,\n eventType: `claude.attachment.${attachmentType}`,\n kind: \"system\",\n timestamp,\n message: toMessage(`Attachment: ${attachmentType}${detail}`),\n raw: parsed,\n };\n }\n\n // progress entries (hook_progress, etc.)\n if (type === \"progress\") {\n const data = parsed.data ?? {};\n const subtype = data.type ?? \"unknown\";\n const label = data.hookName ?? subtype;\n return {\n sessionId,\n eventType: `claude.progress.${subtype}`,\n kind: \"system\",\n timestamp,\n message: toMessage(`Progress: ${subtype} (${label})`),\n raw: parsed,\n };\n }\n\n // queue operation entries (enqueue, dequeue, etc.)\n if (type === \"queue-operation\") {\n const operation = parsed.operation ?? \"unknown\";\n const content = parsed.content ? `: ${parsed.content}` : \"\";\n return {\n sessionId,\n eventType: \"claude.queue_operation\",\n kind: \"system\",\n timestamp,\n message: toMessage(`Queue ${operation}${content}`),\n raw: parsed,\n };\n }\n\n // custom title entries\n if (type === \"custom-title\") {\n const customTitle = parsed.customTitle ?? \"unknown\";\n return {\n sessionId,\n eventType: \"claude.custom_title\",\n kind: \"system\",\n timestamp,\n message: toMessage(`Custom title: ${customTitle}`),\n raw: parsed,\n };\n }\n\n // agent name entries\n if (type === \"agent-name\") {\n const agentName = parsed.agentName ?? \"unknown\";\n return {\n sessionId,\n eventType: \"claude.agent_name\",\n kind: \"system\",\n timestamp,\n message: toMessage(`Agent name: ${agentName}`),\n raw: parsed,\n };\n }\n\n // PR link entries\n if (type === \"pr-link\") {\n const prNumber = parsed.prNumber ?? 0;\n const prUrl = parsed.prUrl ?? \"\";\n return {\n sessionId,\n eventType: \"claude.pr_link\",\n kind: \"system\",\n timestamp,\n message: toMessage(`PR #${prNumber}: ${prUrl}`),\n raw: parsed,\n };\n }\n\n // permission mode changes\n if (type === \"permission-mode\") {\n return {\n sessionId,\n eventType: \"claude.permission_mode\",\n kind: \"system\",\n timestamp,\n message: toMessage(`Permission mode: ${parsed.permissionMode ?? \"unknown\"}`),\n raw: parsed,\n };\n }\n\n // last user prompt captured by the session\n if (type === \"last-prompt\") {\n const prompt = parsed.lastPrompt ?? \"\";\n if (!prompt) return null;\n return {\n sessionId,\n eventType: \"claude.last_prompt\",\n kind: \"system\",\n timestamp,\n message: toMessage(prompt),\n raw: parsed,\n };\n }\n\n // AI-generated session title\n if (type === \"ai-title\") {\n return {\n sessionId,\n eventType: \"claude.ai_title\",\n kind: \"system\",\n timestamp,\n message: toMessage(`AI title: ${parsed.aiTitle ?? \"unknown\"}`),\n raw: parsed,\n };\n }\n\n // periodic task summary (fork-generated, every min(5 steps, 2min))\n if (type === \"task-summary\") {\n return {\n sessionId,\n eventType: \"claude.task_summary\",\n kind: \"system\",\n timestamp,\n message: toMessage(parsed.summary ?? \"[task summary]\"),\n raw: parsed,\n };\n }\n\n // session tag for searchability\n if (type === \"tag\") {\n return {\n sessionId,\n eventType: \"claude.tag\",\n kind: \"system\",\n timestamp,\n message: toMessage(`Tag: ${parsed.tag ?? \"\"}`),\n raw: parsed,\n };\n }\n\n // agent color assignment (from /rename or swarm)\n if (type === \"agent-color\") {\n return {\n sessionId,\n eventType: \"claude.agent_color\",\n kind: \"system\",\n timestamp,\n message: toMessage(`Agent color: ${parsed.agentColor ?? \"unknown\"}`),\n raw: parsed,\n };\n }\n\n // agent setting/definition (from --agent flag)\n if (type === \"agent-setting\") {\n return {\n sessionId,\n eventType: \"claude.agent_setting\",\n kind: \"system\",\n timestamp,\n message: toMessage(`Agent setting: ${parsed.agentSetting ?? \"unknown\"}`),\n raw: parsed,\n };\n }\n\n // session mode (coordinator/normal)\n if (type === \"mode\") {\n return {\n sessionId,\n eventType: \"claude.mode\",\n kind: \"system\",\n timestamp,\n message: toMessage(`Mode: ${parsed.mode ?? \"unknown\"}`),\n raw: parsed,\n };\n }\n\n // worktree session state\n if (type === \"worktree-state\") {\n const ws = parsed.worktreeSession;\n const label = ws ? `entered ${ws.worktreePath ?? \"\"}` : \"exited\";\n return {\n sessionId,\n eventType: \"claude.worktree_state\",\n kind: \"system\",\n timestamp,\n message: toMessage(`Worktree: ${label}`),\n raw: parsed,\n };\n }\n\n // file attribution snapshot (character-level contribution tracking)\n if (type === \"attribution-snapshot\") {\n const fileCount = Object.keys(parsed.fileStates ?? {}).length;\n return {\n sessionId,\n eventType: \"claude.attribution_snapshot\",\n kind: \"system\",\n timestamp,\n message: toMessage(`Attribution snapshot: ${fileCount} files`),\n raw: parsed,\n };\n }\n\n // content replacement stubs (replayed on resume for prompt cache stability)\n if (type === \"content-replacement\") {\n const count = parsed.replacements?.length ?? 0;\n return {\n sessionId,\n eventType: \"claude.content_replacement\",\n kind: \"system\",\n timestamp,\n message: toMessage(`Content replacement: ${count} blocks`),\n raw: parsed,\n };\n }\n\n // speculation accept (speculative execution savings)\n if (type === \"speculation-accept\") {\n return {\n sessionId,\n eventType: \"claude.speculation_accept\",\n kind: \"system\",\n timestamp,\n message: toMessage(`Speculation accepted: saved ${parsed.timeSavedMs ?? 0}ms`),\n raw: parsed,\n };\n }\n\n // context collapse commit (marble-origami)\n if (type === \"marble-origami-commit\") {\n return {\n sessionId,\n eventType: \"claude.context_collapse_commit\",\n kind: \"system\",\n timestamp,\n message: toMessage(parsed.summary ?? `Context collapse: ${parsed.collapseId ?? \"\"}`),\n raw: parsed,\n };\n }\n\n // context collapse snapshot (marble-origami staged queue)\n if (type === \"marble-origami-snapshot\") {\n const stagedCount = parsed.staged?.length ?? 0;\n return {\n sessionId,\n eventType: \"claude.context_collapse_snapshot\",\n kind: \"system\",\n timestamp,\n message: toMessage(`Context collapse snapshot: ${stagedCount} staged`),\n raw: parsed,\n };\n }\n\n if (type !== \"user\" && type !== \"assistant\") return null;\n\n // user/assistant messages\n const rawContent =\n parsed.message?.content ??\n parsed.message ??\n parsed.content ??\n parsed.payload?.content ??\n \"\";\n let message = extractClaudeTextContent(rawContent);\n\n // thinking-only entries have redacted content — preserve them as system events\n if (!message) {\n const hasThinking = Array.isArray(rawContent) && rawContent.some((c) => c?.type === \"thinking\");\n if (!hasThinking) return null;\n message = \"[thinking]\";\n }\n\n const roleHint = parsed.message?.role ?? type;\n return {\n sessionId,\n eventType: `claude.${type}`,\n kind: normalizeRole(roleHint, type === \"user\" ? \"user\" : \"assistant\"),\n timestamp,\n message: toMessage(message),\n raw: parsed,\n };\n}\n","import { extractSessionIdFromPath, normalizeRole, safeJsonParse, toMessage } from \"../utils.mjs\";\n\n// parse a single JSONL line from a Codex session file\nexport function parseCodexLine({ line, filePath }) {\n const parsed = safeJsonParse(line);\n if (!parsed || typeof parsed !== \"object\") return null;\n\n const payload = parsed.payload ?? {};\n const sessionId =\n payload.session_id ??\n payload.id ??\n parsed.session_id ??\n extractSessionIdFromPath(filePath);\n\n // event messages (user/agent/task)\n if (parsed.type === \"event_msg\") {\n const eventType = payload.type ?? \"unknown\";\n if (![\"user_message\", \"agent_message\", \"task_started\", \"task_complete\", \"token_count\", \"agent_reasoning\", \"turn_aborted\", \"context_compacted\"].includes(eventType)) {\n return null;\n }\n\n // resolve kind based on event subtype\n const kind =\n eventType === \"user_message\" ? \"user\" :\n eventType === \"agent_message\" ? \"assistant\" :\n \"system\";\n\n // resolve message based on event subtype\n const message =\n eventType === \"token_count\" ? \"Token count update\" :\n eventType === \"agent_reasoning\" ? payload.text :\n eventType === \"turn_aborted\" ? (payload.reason ? `Turn aborted: ${payload.reason}` : \"Turn aborted\") :\n eventType === \"context_compacted\" ? \"Context compacted\" :\n payload.message ??\n payload.last_agent_message ??\n `${eventType}${payload.turn_id ? ` (${payload.turn_id})` : \"\"}`;\n\n return {\n sessionId,\n eventType: `event_msg.${eventType}`,\n kind,\n timestamp: parsed.timestamp ?? new Date().toISOString(),\n message: toMessage(message),\n raw: parsed,\n };\n }\n\n // session metadata\n if (parsed.type === \"session_meta\") {\n return {\n sessionId,\n eventType: \"session_meta\",\n kind: \"system\",\n timestamp: parsed.timestamp ?? new Date().toISOString(),\n message: `Session started in ${payload.cwd ?? \"unknown cwd\"}`,\n raw: parsed,\n };\n }\n\n // response items (message, reasoning, function calls)\n if (parsed.type === \"response_item\") {\n const subtype = payload.type;\n const ts = parsed.timestamp ?? new Date().toISOString();\n\n // assistant/user/developer messages\n if (subtype === \"message\") {\n const text = (payload.content ?? [])\n .map((c) => c.text ?? \"\")\n .filter(Boolean)\n .join(\"\\n\");\n const roleMap = { developer: \"system\", assistant: \"assistant\", user: \"user\" };\n const kind = roleMap[payload.role] ?? normalizeRole(payload.role);\n\n return {\n sessionId,\n eventType: \"response_item.message\",\n kind,\n timestamp: ts,\n message: toMessage(text || `[${payload.role ?? \"unknown\"} message]`),\n raw: parsed,\n };\n }\n\n // reasoning summaries\n if (subtype === \"reasoning\") {\n const text = (payload.summary ?? [])\n .map((s) => s.text ?? \"\")\n .filter(Boolean)\n .join(\"\\n\");\n\n return {\n sessionId,\n eventType: \"response_item.reasoning\",\n kind: \"system\",\n timestamp: ts,\n message: toMessage(text || \"[reasoning]\"),\n raw: parsed,\n };\n }\n\n // tool invocations\n if (subtype === \"function_call\") {\n const msg = `[${payload.name ?? \"unknown\"}] ${payload.arguments ?? \"\"}`;\n\n return {\n sessionId,\n eventType: \"response_item.function_call\",\n kind: \"system\",\n timestamp: ts,\n message: toMessage(msg),\n raw: parsed,\n };\n }\n\n // tool outputs\n if (subtype === \"function_call_output\") {\n return {\n sessionId,\n eventType: \"response_item.function_call_output\",\n kind: \"system\",\n timestamp: ts,\n message: toMessage(payload.output ?? `[output ${payload.call_id ?? \"\"}]`),\n raw: parsed,\n };\n }\n\n // web search invocations\n if (subtype === \"web_search_call\") {\n const query = payload.action?.query;\n return {\n sessionId,\n eventType: \"response_item.web_search_call\",\n kind: \"system\",\n timestamp: ts,\n message: query ? `[web_search] ${query}` : \"[web_search]\",\n raw: parsed,\n };\n }\n\n // custom tool invocations (e.g. apply_patch)\n if (subtype === \"custom_tool_call\") {\n const msg = `[${payload.name ?? \"unknown\"}] ${payload.input ?? \"\"}`;\n return {\n sessionId,\n eventType: \"response_item.custom_tool_call\",\n kind: \"system\",\n timestamp: ts,\n message: toMessage(msg),\n raw: parsed,\n };\n }\n\n // custom tool outputs\n if (subtype === \"custom_tool_call_output\") {\n return {\n sessionId,\n eventType: \"response_item.custom_tool_call_output\",\n kind: \"system\",\n timestamp: ts,\n message: toMessage(payload.output ?? `[output ${payload.call_id ?? \"\"}]`),\n raw: parsed,\n };\n }\n\n // unknown response_item subtype\n return null;\n }\n\n // session compacted (context window reset)\n if (parsed.type === \"compacted\") {\n return {\n sessionId,\n eventType: \"compacted\",\n kind: \"system\",\n timestamp: parsed.timestamp ?? new Date().toISOString(),\n message: \"Session compacted\",\n raw: parsed,\n };\n }\n\n // turn context (model, policies, cwd)\n if (parsed.type === \"turn_context\") {\n return {\n sessionId,\n eventType: \"turn_context\",\n kind: \"system\",\n timestamp: parsed.timestamp ?? new Date().toISOString(),\n message: `Turn context: model=${payload.model}, policy=${payload.approval_policy}`,\n raw: parsed,\n };\n }\n\n return null;\n}\n","import {\n extractSessionIdFromPath,\n normalizeWhitespace,\n safeJsonParse,\n toMessage,\n truncateString,\n} from \"../utils.mjs\";\n\n// extract text from OpenClaw content (string, array, or object)\nfunction extractOpenClawTextContent(content) {\n if (!content) return \"\";\n if (typeof content === \"string\") return normalizeWhitespace(content);\n\n if (Array.isArray(content)) {\n const textParts = [];\n for (const item of content) {\n if (!item || typeof item !== \"object\") continue;\n if (item.type === \"text\" && typeof item.text === \"string\") {\n const chunk = normalizeWhitespace(item.text);\n if (chunk) textParts.push(chunk);\n }\n }\n return textParts.join(\"\\n\");\n }\n\n if (typeof content === \"object\" && typeof content.text === \"string\") {\n return normalizeWhitespace(content.text);\n }\n\n return \"\";\n}\n\n// extract tool call names from OpenClaw content array\nfunction extractOpenClawToolCalls(content) {\n if (!Array.isArray(content)) return [];\n const names = [];\n for (const item of content) {\n if (!item || typeof item !== \"object\" || item.type !== \"toolCall\") continue;\n const name = normalizeWhitespace(item.name);\n if (name) names.push(name);\n }\n return names;\n}\n\n// build compact raw representation for storage\nfunction buildOpenClawRaw(parsed) {\n const raw = {\n type: parsed.type,\n id: parsed.id,\n parentId: parsed.parentId,\n timestamp: parsed.timestamp,\n };\n\n if (parsed.type === \"session\") {\n raw.session = {\n id: parsed.id,\n version: parsed.version,\n cwd: parsed.cwd,\n parentSession: parsed.parentSession,\n };\n return raw;\n }\n\n if (parsed.type === \"custom\") {\n raw.customType = parsed.customType;\n if (parsed.customType === \"model-snapshot\" && parsed.data && typeof parsed.data === \"object\") {\n raw.data = {\n provider: parsed.data.provider,\n modelApi: parsed.data.modelApi,\n modelId: parsed.data.modelId,\n timestamp: parsed.data.timestamp,\n };\n }\n return raw;\n }\n\n if (parsed.message && typeof parsed.message === \"object\") {\n const contentTypes = Array.isArray(parsed.message.content)\n ? parsed.message.content\n .filter((item) => item && typeof item === \"object\")\n .map((item) => String(item.type ?? \"unknown\"))\n .slice(0, 12)\n : [];\n\n raw.message = {\n role: parsed.message.role,\n stopReason: parsed.message.stopReason,\n toolName: parsed.message.toolName,\n toolCallId: parsed.message.toolCallId,\n isError: parsed.message.isError,\n contentTypes,\n };\n }\n\n if (parsed.type === \"compaction\") {\n raw.compaction = {\n firstKeptEntryId: parsed.firstKeptEntryId,\n tokensBefore: parsed.tokensBefore,\n };\n } else if (parsed.type === \"branch_summary\") {\n raw.branchSummary = {\n firstKeptEntryId: parsed.firstKeptEntryId,\n summary: typeof parsed.summary === \"string\" ? truncateString(parsed.summary, 350) : \"\",\n };\n }\n\n return raw;\n}\n\n// parse a single JSONL line from an OpenClaw session file\nexport function parseOpenClawLine({ line, filePath }) {\n const parsed = safeJsonParse(line);\n if (!parsed || typeof parsed !== \"object\") return null;\n\n const type = String(parsed.type ?? \"\").toLowerCase();\n const sessionId =\n parsed.session_id ??\n parsed.sessionId ??\n parsed.message?.session_id ??\n parsed.message?.sessionId ??\n extractSessionIdFromPath(filePath);\n\n const timestamp = parsed.timestamp ?? parsed.message?.timestamp ?? new Date().toISOString();\n\n // session start\n if (type === \"session\") {\n return {\n sessionId,\n eventType: \"openclaw.session\",\n kind: \"system\",\n timestamp,\n message: toMessage(`Session started in ${parsed.cwd ?? \"unknown cwd\"}`),\n raw: buildOpenClawRaw(parsed),\n };\n }\n\n // custom events\n if (type === \"custom\") {\n const customType = normalizeWhitespace(parsed.customType || \"custom\");\n if (customType === \"openclaw.cache-ttl\") return null;\n\n let message = `Custom event: ${customType}`;\n if (customType === \"model-snapshot\" && parsed.data && typeof parsed.data === \"object\") {\n const provider = normalizeWhitespace(parsed.data.provider || \"\");\n const modelId = normalizeWhitespace(parsed.data.modelId || \"\");\n const modelApi = normalizeWhitespace(parsed.data.modelApi || \"\");\n const details = [provider, modelId].filter(Boolean).join(\"/\");\n message = `Model snapshot${details ? `: ${details}` : \"\"}${modelApi ? ` (${modelApi})` : \"\"}`;\n }\n\n return {\n sessionId,\n eventType: `openclaw.custom.${customType || \"custom\"}`,\n kind: \"system\",\n timestamp,\n message: toMessage(message),\n raw: buildOpenClawRaw(parsed),\n };\n }\n\n // compaction\n if (type === \"compaction\") {\n return {\n sessionId,\n eventType: \"openclaw.compaction\",\n kind: \"system\",\n timestamp,\n message: toMessage(\"Session compaction summary updated\"),\n raw: buildOpenClawRaw(parsed),\n };\n }\n\n // branch summary\n if (type === \"branch_summary\") {\n const summary = normalizeWhitespace(parsed.summary || \"\");\n return {\n sessionId,\n eventType: \"openclaw.branch_summary\",\n kind: \"system\",\n timestamp,\n message: toMessage(summary || \"Branch summary updated\"),\n raw: buildOpenClawRaw(parsed),\n };\n }\n\n if (type !== \"message\" && type !== \"custom_message\") return null;\n\n // user/assistant messages\n const eventMessage = parsed.message ?? {};\n const role = String(eventMessage.role ?? \"\").toLowerCase();\n\n if (role === \"user\" || role === \"assistant\") {\n const text = extractOpenClawTextContent(eventMessage.content);\n if (text) {\n return {\n sessionId,\n eventType: `openclaw.${role}`,\n kind: role === \"user\" ? \"user\" : \"assistant\",\n timestamp,\n message: toMessage(text),\n raw: buildOpenClawRaw(parsed),\n };\n }\n\n // assistant tool calls without text\n if (role === \"assistant\") {\n const toolCalls = extractOpenClawToolCalls(eventMessage.content);\n if (toolCalls.length > 0) {\n const list = toolCalls.slice(0, 5).join(\", \");\n const suffix = toolCalls.length > 5 ? ` (+${toolCalls.length - 5})` : \"\";\n return {\n sessionId,\n eventType: \"openclaw.assistant.tool_use\",\n kind: \"system\",\n timestamp,\n message: toMessage(`Assistant requested tools: ${list}${suffix}`),\n raw: buildOpenClawRaw(parsed),\n };\n }\n }\n\n return null;\n }\n\n // tool results\n if (role === \"toolresult\") {\n const toolName = normalizeWhitespace(eventMessage.toolName || \"\");\n const isError = Boolean(eventMessage.isError);\n let message = `Tool result${toolName ? `: ${toolName}` : \"\"} (${isError ? \"error\" : \"ok\"})`;\n const text = extractOpenClawTextContent(eventMessage.content);\n if (text) message = `${message} ${truncateString(text, 320)}`;\n\n return {\n sessionId,\n eventType: \"openclaw.tool_result\",\n kind: \"system\",\n timestamp,\n message: toMessage(message),\n raw: buildOpenClawRaw(parsed),\n };\n }\n\n return null;\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { randomUUID } from \"node:crypto\";\n\nimport { asIso, coerceMessageText, expandHome, firstMessageTimestamp, normalizeRole } from \"../utils.mjs\";\n\n// validate UUID format\nfunction isUuid(value) {\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(\n String(value ?? \"\").trim()\n );\n}\n\n// ensure we have a valid UUID, generate one if not\nfunction normalizeSessionUuid(raw) {\n const value = String(raw ?? \"\").trim();\n if (isUuid(value)) return value;\n return randomUUID();\n}\n\n// build Claude Code project directory name from cwd\nfunction claudeProjectDirName(cwd) {\n const resolved = path.resolve(String(cwd || process.cwd()));\n return resolved.replace(/[\\\\/]/g, \"-\").replace(/[^A-Za-z0-9._-]/g, \"-\");\n}\n\n// compute session file path under ~/.claude/projects/<project>/\nfunction claudeSessionFilePath(sessionId, cwd, baseDir) {\n const root = baseDir || expandHome(\"~/.claude/projects\");\n return path.join(root, claudeProjectDirName(cwd), `${sessionId}.jsonl`);\n}\n\n// check if a Claude Code session already exists locally\nexport async function hasLocalClaudeSession(sessionId, cwd = \"\", baseDir) {\n const id = String(sessionId ?? \"\").trim();\n if (!id) return false;\n\n // check preferred path first\n const preferredPath = claudeSessionFilePath(id, cwd || process.cwd(), baseDir);\n try {\n const stat = await fs.stat(preferredPath);\n if (stat.isFile()) return true;\n } catch {\n // fall through to glob\n }\n\n // dynamic import to avoid bundling fast-glob as hard dep\n const fg = (await import(\"fast-glob\")).default;\n const root = baseDir || expandHome(\"~/.claude/projects\");\n const pattern = path.join(root, `**/*${id}.jsonl`);\n const files = await fg([pattern], {\n onlyFiles: true,\n absolute: true,\n unique: true,\n suppressErrors: true,\n followSymbolicLinks: false,\n });\n return files.some((filePath) => path.basename(filePath, \".jsonl\") === id);\n}\n\n// write a Claude Code-native JSONL session file from UltraContext messages\nexport async function writeClaudeSession({ sessionId, cwd, messages, baseDir }) {\n const runCwd = String(cwd || process.cwd());\n const resolvedSessionId = normalizeSessionUuid(sessionId);\n const firstTs = asIso(firstMessageTimestamp(messages));\n const filePath = claudeSessionFilePath(resolvedSessionId, runCwd, baseDir);\n\n if (await hasLocalClaudeSession(resolvedSessionId, runCwd, baseDir)) {\n return {\n written: false,\n reason: \"already_exists\",\n filePath,\n sessionId: resolvedSessionId,\n };\n }\n\n try {\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n\n // build linked-list of message entries\n const lines = [];\n let parentUuid = null;\n for (let i = 0; i < (messages?.length ?? 0); i += 1) {\n const message = messages[i];\n const normalizedRole = normalizeRole(message?.role);\n const role = normalizedRole === \"assistant\" ? \"assistant\" : normalizedRole === \"user\" ? \"user\" : \"assistant\";\n const rawText = coerceMessageText(message).trim();\n if (!rawText) continue;\n const text = normalizedRole === \"system\" ? `[system] ${rawText}` : rawText;\n const ts = asIso(\n message?.content?.timestamp ??\n message?.metadata?.timestamp ??\n new Date(new Date(firstTs).getTime() + i * 1000).toISOString()\n );\n const entryUuid = randomUUID();\n lines.push(\n JSON.stringify({\n parentUuid,\n isSidechain: false,\n userType: \"external\",\n cwd: runCwd,\n sessionId: resolvedSessionId,\n version: \"adapter\",\n gitBranch: \"\",\n type: role,\n message: { role, content: text },\n timestamp: ts,\n uuid: entryUuid,\n })\n );\n parentUuid = entryUuid;\n }\n\n // fallback if no messages\n if (lines.length === 0) {\n const entryUuid = randomUUID();\n lines.push(\n JSON.stringify({\n parentUuid: null,\n isSidechain: false,\n userType: \"external\",\n cwd: runCwd,\n sessionId: resolvedSessionId,\n version: \"adapter\",\n gitBranch: \"\",\n type: \"assistant\",\n message: {\n role: \"assistant\",\n content: \"[system] Session restored from UltraContext with no user/assistant messages.\",\n },\n timestamp: new Date().toISOString(),\n uuid: entryUuid,\n })\n );\n }\n\n await fs.writeFile(filePath, `${lines.join(\"\\n\")}\\n`, \"utf8\");\n return {\n written: true,\n reason: \"created\",\n filePath,\n sessionId: resolvedSessionId,\n };\n } catch (error) {\n return {\n written: false,\n reason: \"write_failed\",\n filePath,\n sessionId: resolvedSessionId,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { asIso, coerceMessageText, expandHome, firstMessageTimestamp, normalizeRole } from \"../utils.mjs\";\n\n// build a single event_msg JSONL entry\nfunction buildEventMsgLine(message, fallbackTs) {\n const ts = asIso(message?.content?.timestamp ?? message?.metadata?.timestamp ?? fallbackTs);\n const role = normalizeRole(message?.role);\n const text = coerceMessageText(message).trim();\n if (!text) return null;\n\n if (role === \"user\") {\n return {\n timestamp: ts,\n type: \"event_msg\",\n payload: {\n type: \"user_message\",\n message: text,\n images: [],\n local_images: [],\n text_elements: [],\n },\n };\n }\n\n if (role === \"assistant\") {\n return {\n timestamp: ts,\n type: \"event_msg\",\n payload: { type: \"agent_message\", message: text },\n };\n }\n\n // system events\n return {\n timestamp: ts,\n type: \"event_msg\",\n payload: { type: \"agent_message\", message: `[system] ${text}` },\n };\n}\n\n// compute session file path under ~/.codex/sessions/YYYY/MM/DD/\nfunction sessionFilePath(sessionId, firstTimestamp, baseDir) {\n const iso = asIso(firstTimestamp);\n const [year, month, day] = iso.slice(0, 10).split(\"-\");\n const stamp = iso.replace(/\\.\\d{3}Z$/, \"\").replace(/:/g, \"-\").replace(\"Z\", \"\");\n const root = baseDir || expandHome(\"~/.codex/sessions\");\n const fileName = `rollout-${stamp}-${sessionId}.jsonl`;\n return path.join(root, year, month, day, fileName);\n}\n\n// check if a Codex session already exists locally\nexport async function hasLocalCodexSession(sessionId, baseDir) {\n const id = String(sessionId ?? \"\").trim();\n if (!id) return false;\n\n // dynamic import to avoid bundling fast-glob as hard dep\n const fg = (await import(\"fast-glob\")).default;\n const root = baseDir || expandHome(\"~/.codex/sessions\");\n const pattern = path.join(root, `**/*${id}*.jsonl`);\n const files = await fg([pattern], {\n onlyFiles: true,\n absolute: true,\n unique: true,\n suppressErrors: true,\n followSymbolicLinks: false,\n });\n return files.some((filePath) => filePath.includes(id));\n}\n\n// write a Codex-native JSONL session file from UltraContext messages\nexport async function writeCodexSession({ sessionId, cwd, messages, baseDir }) {\n const id = String(sessionId ?? \"\").trim();\n if (!id) return { written: false, reason: \"missing_session_id\", filePath: \"\" };\n\n if (await hasLocalCodexSession(id, baseDir)) {\n return { written: false, reason: \"already_exists\", filePath: \"\" };\n }\n\n const firstMessageTs = firstMessageTimestamp(messages);\n const firstTs = asIso(firstMessageTs);\n const filePath = sessionFilePath(id, firstTs, baseDir);\n\n try {\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n\n // session_meta header\n const lines = [];\n lines.push(\n JSON.stringify({\n timestamp: firstTs,\n type: \"session_meta\",\n payload: {\n id,\n timestamp: firstTs,\n cwd: cwd || process.cwd(),\n originator: \"ultracontext_daemon\",\n cli_version: \"restored\",\n source: \"cli\",\n model_provider: \"openai\",\n },\n })\n );\n\n // event messages\n let emitted = 0;\n for (let i = 0; i < (messages?.length ?? 0); i += 1) {\n const fallbackTs = new Date(new Date(firstTs).getTime() + i * 1000).toISOString();\n const line = buildEventMsgLine(messages[i], fallbackTs);\n if (!line) continue;\n lines.push(JSON.stringify(line));\n emitted += 1;\n }\n\n // fallback if no messages\n if (emitted === 0) {\n lines.push(\n JSON.stringify({\n timestamp: new Date().toISOString(),\n type: \"event_msg\",\n payload: {\n type: \"agent_message\",\n message: \"[system] Session restored from UltraContext with no user/assistant messages.\",\n },\n })\n );\n }\n\n await fs.writeFile(filePath, `${lines.join(\"\\n\")}\\n`, \"utf8\");\n return { written: true, reason: \"created\", filePath };\n } catch (error) {\n return {\n written: false,\n reason: \"write_failed\",\n filePath,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n"],"mappings":"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"}
|