ctxpool 0.1.0

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/repo.js ADDED
@@ -0,0 +1,182 @@
1
+ import { basename } from "node:path";
2
+ import { limit, runOptional, slugify } from "./util.js";
3
+ const MAX_DIFF_PATCH_CHARS = 120_000;
4
+ export function captureGitSnapshot(cwd = process.cwd()) {
5
+ const topLevel = runOptional("git", ["rev-parse", "--show-toplevel"], cwd);
6
+ const repoPath = topLevel || cwd;
7
+ const isGitRepo = Boolean(topLevel);
8
+ if (!isGitRepo) {
9
+ return {
10
+ repoPath,
11
+ isGitRepo: false,
12
+ branch: "no-git",
13
+ commit: "unknown",
14
+ dirtyFiles: [],
15
+ fileChanges: [],
16
+ diffStat: "",
17
+ diffPatch: "",
18
+ diffPatchTruncated: false,
19
+ stagedDiffPatch: "",
20
+ stagedDiffPatchTruncated: false,
21
+ unstagedDiffPatch: "",
22
+ unstagedDiffPatchTruncated: false,
23
+ recentCommits: []
24
+ };
25
+ }
26
+ const branch = runOptional("git", ["branch", "--show-current"], repoPath) || "detached";
27
+ const commit = runOptional("git", ["rev-parse", "--short", "HEAD"], repoPath) || "unknown";
28
+ const status = runOptional("git", ["status", "--porcelain=v1"], repoPath);
29
+ const diffStat = runOptional("git", ["diff", "--stat"], repoPath);
30
+ const allPatch = truncatePatch(runOptional("git", ["diff", "HEAD", "--no-ext-diff", "--unified=3"], repoPath));
31
+ const stagedPatch = truncatePatch(runOptional("git", ["diff", "--cached", "--no-ext-diff", "--unified=3"], repoPath));
32
+ const unstagedPatch = truncatePatch(runOptional("git", ["diff", "--no-ext-diff", "--unified=3"], repoPath));
33
+ const numstat = runOptional("git", ["diff", "HEAD", "--numstat"], repoPath);
34
+ const recent = runOptional("git", ["log", "--oneline", "-5"], repoPath);
35
+ const fileChanges = parseFileChanges(status, numstat, allPatch.patch);
36
+ return {
37
+ repoPath,
38
+ isGitRepo,
39
+ branch,
40
+ commit,
41
+ dirtyFiles: limit(fileChanges.map((change) => change.path), 40),
42
+ fileChanges: limitFileChanges(fileChanges, 120),
43
+ diffStat,
44
+ diffPatch: allPatch.patch,
45
+ diffPatchTruncated: allPatch.truncated,
46
+ stagedDiffPatch: stagedPatch.patch,
47
+ stagedDiffPatchTruncated: stagedPatch.truncated,
48
+ unstagedDiffPatch: unstagedPatch.patch,
49
+ unstagedDiffPatchTruncated: unstagedPatch.truncated,
50
+ recentCommits: limit(recent.split("\n"), 5)
51
+ };
52
+ }
53
+ export function inferTaskName(explicitTask, repo) {
54
+ if (explicitTask)
55
+ return slugify(explicitTask);
56
+ const branch = repo.branch.trim();
57
+ if (branch && !["main", "master", "develop", "dev", "trunk", "detached", "no-git"].includes(branch)) {
58
+ return slugify(branch.replace(/^(feature|feat|fix|bugfix|chore|task)\//, ""));
59
+ }
60
+ return slugify(basename(repo.repoPath));
61
+ }
62
+ export function parseFileChanges(statusOutput, numstatOutput = "", patch = "") {
63
+ const stats = parseNumstat(numstatOutput);
64
+ const diffs = splitPatchByFile(patch);
65
+ return statusOutput
66
+ .split("\n")
67
+ .map((line) => parseStatusLine(line, stats, diffs))
68
+ .filter((change) => Boolean(change));
69
+ }
70
+ function parseStatusLine(line, stats, diffs) {
71
+ if (!line.trim())
72
+ return undefined;
73
+ const trimmedUnstaged = /^[MADRC] .+/.test(line) && line[2] !== " ";
74
+ const indexStatus = trimmedUnstaged ? " " : line[0] || " ";
75
+ const worktreeStatus = trimmedUnstaged ? line[0] : line[1] || " ";
76
+ const rawPath = (trimmedUnstaged ? line.slice(2) : line.slice(3)).trim();
77
+ if (!rawPath)
78
+ return undefined;
79
+ const renamed = rawPath.includes(" -> ");
80
+ const [oldPath, currentPath] = renamed ? rawPath.split(" -> ", 2) : ["", rawPath];
81
+ const path = currentPath || rawPath;
82
+ const status = mapStatus(indexStatus, worktreeStatus, renamed);
83
+ const stat = stats.get(path) || stats.get(oldPath) || { additions: 0, deletions: 0 };
84
+ return {
85
+ path,
86
+ oldPath: oldPath || undefined,
87
+ status,
88
+ indexStatus: indexStatus.trim() || undefined,
89
+ worktreeStatus: worktreeStatus.trim() || undefined,
90
+ additions: stat.additions,
91
+ deletions: stat.deletions,
92
+ staged: indexStatus !== " " && indexStatus !== "?",
93
+ unstaged: worktreeStatus !== " " && worktreeStatus !== "?",
94
+ untracked: indexStatus === "?" && worktreeStatus === "?",
95
+ diff: diffs.get(path) || diffs.get(oldPath)
96
+ };
97
+ }
98
+ function mapStatus(indexStatus, worktreeStatus, renamed) {
99
+ if (indexStatus === "?" && worktreeStatus === "?")
100
+ return "untracked";
101
+ if (renamed || indexStatus === "R" || worktreeStatus === "R")
102
+ return "renamed";
103
+ if (indexStatus === "C" || worktreeStatus === "C")
104
+ return "copied";
105
+ if (indexStatus === "A" || worktreeStatus === "A")
106
+ return "added";
107
+ if (indexStatus === "D" || worktreeStatus === "D")
108
+ return "deleted";
109
+ if (indexStatus === "M" || worktreeStatus === "M")
110
+ return "modified";
111
+ return "unknown";
112
+ }
113
+ function parseNumstat(output) {
114
+ const stats = new Map();
115
+ for (const line of output.split("\n")) {
116
+ const parts = line.split("\t");
117
+ if (parts.length < 3)
118
+ continue;
119
+ const additions = parts[0] === "-" ? 0 : Number(parts[0]) || 0;
120
+ const deletions = parts[1] === "-" ? 0 : Number(parts[1]) || 0;
121
+ const path = normalizeNumstatPath(parts.slice(2).join("\t"));
122
+ if (path)
123
+ stats.set(path, { additions, deletions });
124
+ }
125
+ return stats;
126
+ }
127
+ function normalizeNumstatPath(path) {
128
+ const renameMatch = path.match(/^(.*) => (.*)$/);
129
+ if (!renameMatch)
130
+ return path.trim();
131
+ const [, before, after] = renameMatch;
132
+ const prefix = before.includes("{") && after.includes("}") ? "" : "";
133
+ return `${prefix}${after.replace(/[{}]/g, "")}`.trim();
134
+ }
135
+ function splitPatchByFile(patch) {
136
+ const chunks = new Map();
137
+ const lines = patch.split("\n");
138
+ let currentPath = "";
139
+ let current = [];
140
+ const flush = () => {
141
+ if (currentPath && current.length)
142
+ chunks.set(currentPath, current.join("\n"));
143
+ };
144
+ for (const line of lines) {
145
+ if (line.startsWith("diff --git ")) {
146
+ flush();
147
+ current = [line];
148
+ currentPath = parseDiffPath(line);
149
+ }
150
+ else if (current.length) {
151
+ current.push(line);
152
+ }
153
+ }
154
+ flush();
155
+ return chunks;
156
+ }
157
+ function parseDiffPath(line) {
158
+ const match = line.match(/^diff --git a\/(.+) b\/(.+)$/);
159
+ return match?.[2] || "";
160
+ }
161
+ function truncatePatch(value) {
162
+ const truncated = value.length > MAX_DIFF_PATCH_CHARS;
163
+ return {
164
+ patch: truncated ? `${value.slice(0, MAX_DIFF_PATCH_CHARS)}\n\n[ContextPool: diff truncated at ${MAX_DIFF_PATCH_CHARS} characters]` : value,
165
+ truncated
166
+ };
167
+ }
168
+ function limitFileChanges(changes, count) {
169
+ const seen = new Set();
170
+ const result = [];
171
+ for (const change of changes) {
172
+ const key = `${change.status}:${change.path}`;
173
+ if (seen.has(key))
174
+ continue;
175
+ seen.add(key);
176
+ result.push(change);
177
+ if (result.length >= count)
178
+ break;
179
+ }
180
+ return result;
181
+ }
182
+ //# sourceMappingURL=repo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo.js","sourceRoot":"","sources":["../src/repo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { SourceAgent, SourceSession } from "./types.js";
2
+ export type SessionFrom = "auto" | SourceAgent;
3
+ export type ResolveSessionOptions = {
4
+ from?: SessionFrom;
5
+ cwd: string;
6
+ session?: string;
7
+ budget?: number;
8
+ };
9
+ export declare function resolveSessionSource(options: ResolveSessionOptions): SourceSession;
10
+ export declare function parseCodexSession(path: string, budget?: number): SourceSession;
11
+ export declare function parseClaudeSession(path: string, budget?: number): SourceSession;
@@ -0,0 +1,410 @@
1
+ import { closeSync, existsSync, openSync, readFileSync, readSync, statSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { basename, join, resolve } from "node:path";
4
+ import { findRecentFiles, unique } from "./util.js";
5
+ export function resolveSessionSource(options) {
6
+ const from = normalizeFrom(options.from || "auto");
7
+ const cwd = resolve(options.cwd);
8
+ if (options.session) {
9
+ return resolveExplicitSession(from, cwd, options.session, options.budget);
10
+ }
11
+ if (from === "codex")
12
+ return parseCandidate(requiredBest(findCodexCandidates(cwd), "codex", cwd), options.budget);
13
+ if (from === "claude")
14
+ return parseCandidate(requiredBest(findClaudeCandidates(cwd), "claude", cwd), options.budget);
15
+ const candidates = [...findCodexCandidates(cwd), ...findClaudeCandidates(cwd)]
16
+ .sort(compareCandidates);
17
+ if (candidates.length === 0) {
18
+ throw new Error("No Codex or Claude session files were found. Pass --from and --session with a JSONL path.");
19
+ }
20
+ const [first, second] = candidates;
21
+ if (first &&
22
+ second &&
23
+ first.matchedCwd &&
24
+ second.matchedCwd &&
25
+ first.source !== second.source &&
26
+ Math.abs(Date.parse(first.updatedAt) - Date.parse(second.updatedAt)) < 10 * 60 * 1000) {
27
+ throw new Error(`Both Codex and Claude have recent sessions for this workspace. Re-run with --from ${first.source} or --from ${second.source}.`);
28
+ }
29
+ return parseCandidate(first, options.budget);
30
+ }
31
+ function normalizeFrom(from) {
32
+ if (from === "auto" || from === "codex" || from === "claude")
33
+ return from;
34
+ throw new Error(`Unsupported --from value "${from}". Use auto, codex, or claude.`);
35
+ }
36
+ export function parseCodexSession(path, budget = 12_000) {
37
+ const lines = readSessionLines(path);
38
+ const transcript = [];
39
+ let id = sessionIdFromPath(path);
40
+ let cwd;
41
+ let updatedAt = statSync(path).mtime.toISOString();
42
+ for (const line of lines) {
43
+ const item = parseJson(line);
44
+ if (!item || typeof item !== "object")
45
+ continue;
46
+ const record = item;
47
+ const type = stringValue(record.type);
48
+ if (type === "session_meta") {
49
+ const payload = objectValue(record.payload);
50
+ id = stringValue(payload.id) || id;
51
+ cwd = stringValue(payload.cwd) || cwd;
52
+ updatedAt = stringValue(payload.timestamp) || updatedAt;
53
+ continue;
54
+ }
55
+ const timestamp = stringValue(record.timestamp) || stringValue(objectValue(record.payload).timestamp);
56
+ if (type === "event_msg") {
57
+ const payload = objectValue(record.payload);
58
+ const payloadType = stringValue(payload.type);
59
+ if (payloadType === "user_message")
60
+ pushEntry(transcript, "user", stringValue(payload.message), timestamp, "message");
61
+ if (payloadType === "agent_message")
62
+ pushEntry(transcript, "assistant", stringValue(payload.message), timestamp, "message");
63
+ continue;
64
+ }
65
+ if (type === "response_item") {
66
+ const payload = objectValue(record.payload);
67
+ const itemType = stringValue(payload.type);
68
+ if (itemType === "message") {
69
+ const role = stringValue(payload.role) === "user" ? "user" : "assistant";
70
+ pushEntry(transcript, role, collectText(payload.content).join("\n"), timestamp, "message");
71
+ }
72
+ else if (itemType === "function_call") {
73
+ const name = stringValue(payload.name) || "tool_call";
74
+ pushEntry(transcript, "tool", `${name} ${stringValue(payload.arguments)}`.trim(), timestamp, "tool_call");
75
+ }
76
+ else if (itemType === "function_call_output") {
77
+ pushEntry(transcript, "tool", stringValue(payload.output), timestamp, "tool_output");
78
+ }
79
+ }
80
+ }
81
+ return buildSession({
82
+ source: "codex",
83
+ id,
84
+ path,
85
+ cwd,
86
+ updatedAt,
87
+ matchedCwd: false,
88
+ lineCount: lines.length,
89
+ transcript,
90
+ budget
91
+ });
92
+ }
93
+ export function parseClaudeSession(path, budget = 12_000) {
94
+ const lines = readSessionLines(path);
95
+ const transcript = [];
96
+ let id = sessionIdFromPath(path);
97
+ let cwd;
98
+ let updatedAt = statSync(path).mtime.toISOString();
99
+ for (const line of lines) {
100
+ const item = parseJson(line);
101
+ if (!item || typeof item !== "object")
102
+ continue;
103
+ const record = item;
104
+ if (record.isMeta === true)
105
+ continue;
106
+ id = stringValue(record.sessionId) || id;
107
+ cwd = stringValue(record.cwd) || cwd;
108
+ const timestamp = stringValue(record.timestamp);
109
+ updatedAt = timestamp || updatedAt;
110
+ const type = stringValue(record.type);
111
+ const message = objectValue(record.message);
112
+ if (message.role || message.content) {
113
+ const role = stringValue(message.role) === "assistant" ? "assistant" : stringValue(message.role) === "user" ? "user" : "system";
114
+ pushEntry(transcript, role, collectText(message.content).join("\n"), timestamp, "message");
115
+ continue;
116
+ }
117
+ if (type === "system" || stringValue(record.subtype) === "local_command") {
118
+ pushEntry(transcript, "tool", collectText(record.content).join("\n"), timestamp, stringValue(record.subtype) || "system");
119
+ }
120
+ }
121
+ return buildSession({
122
+ source: "claude",
123
+ id,
124
+ path,
125
+ cwd,
126
+ updatedAt,
127
+ matchedCwd: false,
128
+ lineCount: lines.length,
129
+ transcript,
130
+ budget,
131
+ supplementalPaths: latestClaudeSupplementalPaths()
132
+ });
133
+ }
134
+ function resolveExplicitSession(from, cwd, session, budget) {
135
+ if (existsSync(session)) {
136
+ const source = from === "auto" ? inferSourceFromPath(session) : from;
137
+ if (source === "claude")
138
+ return parseWithMatch(parseClaudeSession(session, budget), cwd);
139
+ return parseWithMatch(parseCodexSession(session, budget), cwd);
140
+ }
141
+ if (from === "claude") {
142
+ throw new Error("--session for Claude must be a JSONL path.");
143
+ }
144
+ const match = findRecentFiles(join(homedir(), ".codex", "sessions"), 500)
145
+ .find((path) => path.includes(session));
146
+ if (!match)
147
+ throw new Error(`No Codex session file matched "${session}". Pass a JSONL path instead.`);
148
+ return parseWithMatch(parseCodexSession(match, budget), cwd);
149
+ }
150
+ function findCodexCandidates(cwd) {
151
+ const paths = findRecentFiles(join(homedir(), ".codex", "sessions"), 300)
152
+ .filter((path) => path.endsWith(".jsonl"));
153
+ const index = readCodexIndex();
154
+ return paths.map((path) => {
155
+ const meta = readCodexMeta(path);
156
+ const id = meta.id || sessionIdFromPath(path);
157
+ return {
158
+ source: "codex",
159
+ path,
160
+ id,
161
+ cwd: meta.cwd,
162
+ updatedAt: meta.updatedAt || statSync(path).mtime.toISOString(),
163
+ matchedCwd: samePath(meta.cwd, cwd),
164
+ threadName: index.get(id)
165
+ };
166
+ }).sort(compareCandidates);
167
+ }
168
+ function findClaudeCandidates(cwd) {
169
+ const encoded = encodeClaudeProjectPath(cwd);
170
+ const preferred = join(homedir(), ".claude", "projects", encoded);
171
+ const roots = existsSync(preferred) ? [preferred] : [join(homedir(), ".claude", "projects")];
172
+ return roots
173
+ .flatMap((root) => findRecentFiles(root, 300))
174
+ .filter((path) => path.endsWith(".jsonl"))
175
+ .map((path) => {
176
+ const meta = readClaudeMeta(path);
177
+ return {
178
+ source: "claude",
179
+ path,
180
+ id: meta.id || sessionIdFromPath(path),
181
+ cwd: meta.cwd,
182
+ updatedAt: meta.updatedAt || statSync(path).mtime.toISOString(),
183
+ matchedCwd: samePath(meta.cwd, cwd)
184
+ };
185
+ })
186
+ .sort(compareCandidates);
187
+ }
188
+ function parseCandidate(candidate, budget) {
189
+ const session = candidate.source === "codex" ? parseCodexSession(candidate.path, budget) : parseClaudeSession(candidate.path, budget);
190
+ session.id = candidate.id || session.id;
191
+ session.cwd = candidate.cwd || session.cwd;
192
+ session.updatedAt = candidate.updatedAt || session.updatedAt;
193
+ session.matchedCwd = candidate.matchedCwd;
194
+ session.threadName = candidate.threadName || session.threadName;
195
+ return session;
196
+ }
197
+ function requiredBest(candidates, source, cwd) {
198
+ const best = candidates[0];
199
+ if (!best)
200
+ throw new Error(`No ${source} sessions were found for ${cwd}. Pass --session with a JSONL path.`);
201
+ return best;
202
+ }
203
+ function compareCandidates(a, b) {
204
+ if (a.matchedCwd !== b.matchedCwd)
205
+ return a.matchedCwd ? -1 : 1;
206
+ return Date.parse(b.updatedAt) - Date.parse(a.updatedAt);
207
+ }
208
+ function buildSession(args) {
209
+ const transcript = args.transcript.filter((entry) => isUsefulText(entry.text));
210
+ return {
211
+ source: args.source,
212
+ id: args.id,
213
+ path: args.path,
214
+ cwd: args.cwd,
215
+ updatedAt: args.updatedAt,
216
+ matchedCwd: args.matchedCwd,
217
+ lineCount: args.lineCount,
218
+ transcript,
219
+ transcriptExcerpt: renderTranscriptExcerpt(transcript, args.budget || 12_000),
220
+ supplementalPaths: args.supplementalPaths
221
+ };
222
+ }
223
+ function renderTranscriptExcerpt(entries, budget) {
224
+ const rendered = entries.slice(-80).map((entry) => {
225
+ const when = entry.timestamp ? ` ${entry.timestamp}` : "";
226
+ const kind = entry.kind ? `/${entry.kind}` : "";
227
+ return `### ${entry.role}${kind}${when}\n${entry.text}`;
228
+ });
229
+ let output = rendered.join("\n\n").trim();
230
+ if (output.length > budget)
231
+ output = output.slice(output.length - budget).replace(/^[\s\S]*?(?=### )/, "");
232
+ return output || "No transcript excerpt captured.";
233
+ }
234
+ function readCodexMeta(path) {
235
+ for (const line of readHeadLines(path).slice(0, 20)) {
236
+ const item = parseJson(line);
237
+ if (!item || typeof item !== "object")
238
+ continue;
239
+ const record = item;
240
+ if (stringValue(record.type) !== "session_meta")
241
+ continue;
242
+ const payload = objectValue(record.payload);
243
+ return {
244
+ id: stringValue(payload.id),
245
+ cwd: stringValue(payload.cwd),
246
+ updatedAt: stringValue(payload.timestamp)
247
+ };
248
+ }
249
+ return {};
250
+ }
251
+ function readClaudeMeta(path) {
252
+ for (const line of readHeadLines(path).slice(0, 30)) {
253
+ const item = parseJson(line);
254
+ if (!item || typeof item !== "object")
255
+ continue;
256
+ const record = item;
257
+ const cwd = stringValue(record.cwd);
258
+ if (!cwd)
259
+ continue;
260
+ return {
261
+ id: stringValue(record.sessionId),
262
+ cwd,
263
+ updatedAt: stringValue(record.timestamp)
264
+ };
265
+ }
266
+ return {};
267
+ }
268
+ function readCodexIndex() {
269
+ const indexPath = join(homedir(), ".codex", "session_index.jsonl");
270
+ const map = new Map();
271
+ if (!existsSync(indexPath))
272
+ return map;
273
+ for (const line of readLines(indexPath)) {
274
+ const item = parseJson(line);
275
+ if (!item || typeof item !== "object")
276
+ continue;
277
+ const record = item;
278
+ const id = stringValue(record.id);
279
+ const name = stringValue(record.thread_name);
280
+ if (id && name)
281
+ map.set(id, name);
282
+ }
283
+ return map;
284
+ }
285
+ function latestClaudeSupplementalPaths() {
286
+ return unique([
287
+ ...findRecentFiles(join(homedir(), ".claude", "plans"), 5).filter((path) => path.endsWith(".md")),
288
+ ...findRecentFiles(join(homedir(), ".claude", "tasks"), 5).filter((path) => path.endsWith(".json"))
289
+ ]).slice(0, 8);
290
+ }
291
+ function readLines(path) {
292
+ return readFileSync(path, "utf8").split(/\r?\n/).filter(Boolean);
293
+ }
294
+ function readHeadLines(path) {
295
+ const stats = statSync(path);
296
+ if (stats.size <= 256_000)
297
+ return readLines(path);
298
+ return readSlice(path, 0, 256_000).split(/\r?\n/).filter(Boolean);
299
+ }
300
+ function readSessionLines(path) {
301
+ const stats = statSync(path);
302
+ if (stats.size <= 4_000_000)
303
+ return readLines(path);
304
+ const head = readSlice(path, 0, 512_000);
305
+ const tailLength = Math.min(2_000_000, stats.size);
306
+ const tail = readSlice(path, stats.size - tailLength, tailLength);
307
+ return `${head}\n${tail}`.split(/\r?\n/).filter(Boolean);
308
+ }
309
+ function readSlice(path, position, length) {
310
+ const fd = openSync(path, "r");
311
+ try {
312
+ const buffer = Buffer.alloc(length);
313
+ const bytesRead = readSync(fd, buffer, 0, length, position);
314
+ return buffer.subarray(0, bytesRead).toString("utf8");
315
+ }
316
+ finally {
317
+ closeSync(fd);
318
+ }
319
+ }
320
+ function parseJson(line) {
321
+ try {
322
+ return JSON.parse(line);
323
+ }
324
+ catch {
325
+ return undefined;
326
+ }
327
+ }
328
+ function collectText(value) {
329
+ if (typeof value === "string")
330
+ return [value];
331
+ if (Array.isArray(value))
332
+ return value.flatMap(collectText);
333
+ if (!value || typeof value !== "object")
334
+ return [];
335
+ const record = value;
336
+ return ["text", "content", "message", "output", "error", "body", "name", "input"].flatMap((key) => collectText(record[key]));
337
+ }
338
+ function pushEntry(entries, role, text, timestamp, kind) {
339
+ const clean = cleanText(text);
340
+ if (!isUsefulText(clean))
341
+ return;
342
+ entries.push({ role, text: clean, timestamp, kind });
343
+ }
344
+ function cleanText(text) {
345
+ return text
346
+ .replace(/\u001b\[[0-9;]*m/g, "")
347
+ .replace(/<local-command-caveat>[\s\S]*?<\/local-command-caveat>/g, "")
348
+ .replace(/<permissions instructions>[\s\S]*?<\/permissions instructions>/g, "")
349
+ .replace(/<app-context>[\s\S]*?<\/app-context>/g, "")
350
+ .replace(/<collaboration_mode>[\s\S]*?<\/collaboration_mode>/g, "")
351
+ .replace(/<skills_instructions>[\s\S]*?<\/skills_instructions>/g, "")
352
+ .replace(/<plugins_instructions>[\s\S]*?<\/plugins_instructions>/g, "")
353
+ .replace(/"encrypted_content":"[^"]+"/g, "")
354
+ .replace(/\n{3,}/g, "\n\n")
355
+ .trim();
356
+ }
357
+ function isUsefulText(text) {
358
+ if (!text || text.length < 3)
359
+ return false;
360
+ if (text.includes("base_instructions"))
361
+ return false;
362
+ if (text.includes("Knowledge cutoff:"))
363
+ return false;
364
+ if (text.includes("You are Codex"))
365
+ return false;
366
+ if (text.includes("Filesystem sandboxing defines"))
367
+ return false;
368
+ if (text.includes("# Codex desktop context"))
369
+ return false;
370
+ if (text.includes("### Available skills"))
371
+ return false;
372
+ if (text.includes("### Skill roots"))
373
+ return false;
374
+ if (text.includes("Tool definitions"))
375
+ return false;
376
+ if (text.includes("Valid channels:"))
377
+ return false;
378
+ if (text.includes("# Handoff:"))
379
+ return false;
380
+ if (text.includes("DO NOT respond to these messages"))
381
+ return false;
382
+ if (text.includes("deferred_tools_delta"))
383
+ return false;
384
+ return true;
385
+ }
386
+ function objectValue(value) {
387
+ return value && typeof value === "object" ? value : {};
388
+ }
389
+ function stringValue(value) {
390
+ return typeof value === "string" ? value : "";
391
+ }
392
+ function sessionIdFromPath(path) {
393
+ return basename(path).replace(/\.(jsonl|json)$/i, "").replace(/^rollout-[^-]+-[^-]+-[^-]+-/, "");
394
+ }
395
+ function samePath(a, b) {
396
+ if (!a)
397
+ return false;
398
+ return resolve(a) === resolve(b);
399
+ }
400
+ function parseWithMatch(session, cwd) {
401
+ session.matchedCwd = samePath(session.cwd, cwd);
402
+ return session;
403
+ }
404
+ function inferSourceFromPath(path) {
405
+ return path.includes("/.claude/") ? "claude" : "codex";
406
+ }
407
+ function encodeClaudeProjectPath(cwd) {
408
+ return resolve(cwd).replace(/[\/\\]/g, "-");
409
+ }
410
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}