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/LICENSE +21 -0
- package/README.md +154 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +217 -0
- package/dist/cli.js.map +1 -0
- package/dist/clipboard.d.ts +1 -0
- package/dist/clipboard.js +18 -0
- package/dist/clipboard.js.map +1 -0
- package/dist/handoff.d.ts +36 -0
- package/dist/handoff.js +868 -0
- package/dist/handoff.js.map +1 -0
- package/dist/logs.d.ts +9 -0
- package/dist/logs.js +82 -0
- package/dist/logs.js.map +1 -0
- package/dist/mcp.d.ts +1 -0
- package/dist/mcp.js +245 -0
- package/dist/mcp.js.map +1 -0
- package/dist/paths.d.ts +10 -0
- package/dist/paths.js +22 -0
- package/dist/paths.js.map +1 -0
- package/dist/repo.d.ts +4 -0
- package/dist/repo.js +182 -0
- package/dist/repo.js.map +1 -0
- package/dist/session.d.ts +11 -0
- package/dist/session.js +410 -0
- package/dist/session.js.map +1 -0
- package/dist/store.d.ts +33 -0
- package/dist/store.js +215 -0
- package/dist/store.js.map +1 -0
- package/dist/types.d.ts +242 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/ui.d.ts +31 -0
- package/dist/ui.js +556 -0
- package/dist/ui.js.map +1 -0
- package/dist/util.d.ts +6 -0
- package/dist/util.js +74 -0
- package/dist/util.js.map +1 -0
- package/dist-web/assets/contextpool-mark-Bu_00i5t.svg +16 -0
- package/dist-web/assets/index-BfHRocKl.js +14 -0
- package/dist-web/assets/index-l1QjYqDb.css +2 -0
- package/dist-web/index.html +14 -0
- package/package.json +64 -0
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
|
package/dist/repo.js.map
ADDED
|
@@ -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;
|
package/dist/session.js
ADDED
|
@@ -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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"}
|