claude-pager 0.3.4 → 0.3.6
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/index.js +0 -0
- package/dist/cli/recover.d.ts.map +1 -1
- package/dist/cli/recover.js +48 -5
- package/dist/cli/recover.js.map +1 -1
- package/dist/hooks/index.js +0 -0
- package/dist/sessions/tracker.d.ts.map +1 -1
- package/dist/sessions/tracker.js +6 -1
- package/dist/sessions/tracker.js.map +1 -1
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
File without changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recover.d.ts","sourceRoot":"","sources":["../../src/cli/recover.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"recover.d.ts","sourceRoot":"","sources":["../../src/cli/recover.ts"],"names":[],"mappings":"AAuBA,wBAAgB,OAAO,IAAI,IAAI,CAsE9B"}
|
package/dist/cli/recover.js
CHANGED
|
@@ -2,8 +2,26 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.recover = recover;
|
|
4
4
|
const node_child_process_1 = require("node:child_process");
|
|
5
|
+
const node_fs_1 = require("node:fs");
|
|
6
|
+
const node_path_1 = require("node:path");
|
|
7
|
+
const node_os_1 = require("node:os");
|
|
5
8
|
const tracker_js_1 = require("../sessions/tracker.js");
|
|
6
9
|
const index_js_1 = require("../config/index.js");
|
|
10
|
+
function projectDir(cwd) {
|
|
11
|
+
return (0, node_path_1.join)((0, node_os_1.homedir)(), '.claude', 'projects', cwd.replace(/\//g, '-'));
|
|
12
|
+
}
|
|
13
|
+
function listTranscriptsByMtime(cwd) {
|
|
14
|
+
try {
|
|
15
|
+
const dir = projectDir(cwd);
|
|
16
|
+
return (0, node_fs_1.readdirSync)(dir)
|
|
17
|
+
.filter(f => f.endsWith('.jsonl'))
|
|
18
|
+
.map(f => ({ uuid: f.replace(/\.jsonl$/, ''), mtime: (0, node_fs_1.statSync)((0, node_path_1.join)(dir, f)).mtimeMs }))
|
|
19
|
+
.sort((a, b) => b.mtime - a.mtime);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
7
25
|
function recover() {
|
|
8
26
|
(0, index_js_1.ensureDataDir)();
|
|
9
27
|
let panes;
|
|
@@ -25,9 +43,34 @@ function recover() {
|
|
|
25
43
|
console.log('No Claude Code sessions found in tmux.');
|
|
26
44
|
return;
|
|
27
45
|
}
|
|
28
|
-
|
|
46
|
+
// Drop placeholders from a previous recover so the same panes don't appear twice.
|
|
47
|
+
// Real-UUID sessions stay — they may be live and registered through hooks.
|
|
48
|
+
for (const s of (0, tracker_js_1.listSessions)()) {
|
|
49
|
+
if (s.sessionId.startsWith('recovered-')) {
|
|
50
|
+
(0, tracker_js_1.removeSession)(s.sessionId);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// Map each pane to the most-recently-modified unclaimed transcript in its cwd.
|
|
54
|
+
// Heuristic: when several Claudes share a cwd, panes are matched to transcripts
|
|
55
|
+
// by mtime order — we have no reliable pane→transcript link from tmux alone.
|
|
56
|
+
const claimedByCwd = new Map();
|
|
57
|
+
let matched = 0;
|
|
58
|
+
let placeholders = 0;
|
|
29
59
|
for (const pane of claudePanes) {
|
|
30
|
-
const
|
|
60
|
+
const transcripts = listTranscriptsByMtime(pane.cwd);
|
|
61
|
+
const claimed = claimedByCwd.get(pane.cwd) ?? new Set();
|
|
62
|
+
const match = transcripts.find(t => !claimed.has(t.uuid));
|
|
63
|
+
let sessionId;
|
|
64
|
+
if (match) {
|
|
65
|
+
sessionId = match.uuid;
|
|
66
|
+
claimed.add(match.uuid);
|
|
67
|
+
claimedByCwd.set(pane.cwd, claimed);
|
|
68
|
+
matched++;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
sessionId = `recovered-${pane.paneId.replace('%', '')}`;
|
|
72
|
+
placeholders++;
|
|
73
|
+
}
|
|
31
74
|
(0, tracker_js_1.registerSession)({
|
|
32
75
|
sessionId,
|
|
33
76
|
pid: 0,
|
|
@@ -37,9 +80,9 @@ function recover() {
|
|
|
37
80
|
timestamp: Date.now(),
|
|
38
81
|
});
|
|
39
82
|
const project = pane.cwd.split('/').pop();
|
|
40
|
-
|
|
41
|
-
|
|
83
|
+
const tag = match ? 'matched transcript' : 'no transcript found';
|
|
84
|
+
console.log(` ${pane.paneId} → ${project} (${sessionId}) — ${tag}`);
|
|
42
85
|
}
|
|
43
|
-
console.log(`\nRecovered ${
|
|
86
|
+
console.log(`\nRecovered ${claudePanes.length} session(s): ${matched} matched, ${placeholders} placeholder.`);
|
|
44
87
|
}
|
|
45
88
|
//# sourceMappingURL=recover.js.map
|
package/dist/cli/recover.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recover.js","sourceRoot":"","sources":["../../src/cli/recover.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"recover.js","sourceRoot":"","sources":["../../src/cli/recover.ts"],"names":[],"mappings":"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"}
|
package/dist/hooks/index.js
CHANGED
|
File without changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/sessions/tracker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/sessions/tracker.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAM/C,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAQvD;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAKxD;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAKhE;AAED,wBAAgB,YAAY,IAAI,WAAW,EAAE,CAO5C;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOnD;AAuBD,wBAAgB,iBAAiB,IAAI,MAAM,CAc1C"}
|
package/dist/sessions/tracker.js
CHANGED
|
@@ -9,6 +9,7 @@ exports.cleanDeadSessions = cleanDeadSessions;
|
|
|
9
9
|
const node_fs_1 = require("node:fs");
|
|
10
10
|
const node_path_1 = require("node:path");
|
|
11
11
|
const node_child_process_1 = require("node:child_process");
|
|
12
|
+
const node_os_1 = require("node:os");
|
|
12
13
|
const index_js_1 = require("../config/index.js");
|
|
13
14
|
const json_js_1 = require("../utils/json.js");
|
|
14
15
|
const validation_js_1 = require("../utils/validation.js");
|
|
@@ -74,7 +75,11 @@ function isTmuxPaneAlive(pane) {
|
|
|
74
75
|
}
|
|
75
76
|
}
|
|
76
77
|
function isSessionAlive(info) {
|
|
77
|
-
//
|
|
78
|
+
// Sessions registered before the last system boot are always dead, even if
|
|
79
|
+
// their tmuxPane id (e.g. %1) has been reassigned to an unrelated new pane.
|
|
80
|
+
const bootTime = Date.now() - (0, node_os_1.uptime)() * 1000;
|
|
81
|
+
if (info.timestamp && info.timestamp < bootTime)
|
|
82
|
+
return false;
|
|
78
83
|
if (info.tmuxPane) {
|
|
79
84
|
return isTmuxPaneAlive(info.tmuxPane);
|
|
80
85
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../src/sessions/tracker.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../src/sessions/tracker.ts"],"names":[],"mappings":"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"}
|