@claude-tools-i-use/teleport 1.0.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/api.d.ts +18 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +62 -0
- package/dist/api.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +163 -0
- package/dist/cli.js.map +1 -0
- package/dist/session.d.ts +52 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +422 -0
- package/dist/session.js.map +1 -0
- package/dist/types.d.ts +83 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +44 -0
package/dist/api.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { TeleportPayload, TeleportResponse, TeleportReturnPayload } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Upload a teleport payload and get back a URL
|
|
4
|
+
*/
|
|
5
|
+
export declare function uploadTeleport(payload: TeleportPayload): Promise<TeleportResponse>;
|
|
6
|
+
/**
|
|
7
|
+
* Fetch a teleport payload by ID
|
|
8
|
+
*/
|
|
9
|
+
export declare function fetchTeleport(teleportId: string): Promise<TeleportPayload>;
|
|
10
|
+
/**
|
|
11
|
+
* Fetch return payload (messages added in web)
|
|
12
|
+
*/
|
|
13
|
+
export declare function fetchReturnPayload(teleportId: string): Promise<TeleportReturnPayload | null>;
|
|
14
|
+
/**
|
|
15
|
+
* Submit return payload (from web to CLI)
|
|
16
|
+
*/
|
|
17
|
+
export declare function submitReturnPayload(teleportId: string, payload: TeleportReturnPayload): Promise<void>;
|
|
18
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAIpB;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,gBAAgB,CAAC,CAmB3B;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,CAAC,CAW1B;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAWvC;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAef"}
|
package/dist/api.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
const API_BASE = process.env.TELEPORT_API_URL || "https://tools.joshduffy.dev";
|
|
2
|
+
/**
|
|
3
|
+
* Upload a teleport payload and get back a URL
|
|
4
|
+
*/
|
|
5
|
+
export async function uploadTeleport(payload) {
|
|
6
|
+
const response = await fetch(`${API_BASE}/api/teleport`, {
|
|
7
|
+
method: "POST",
|
|
8
|
+
headers: {
|
|
9
|
+
"Content-Type": "application/json",
|
|
10
|
+
},
|
|
11
|
+
body: JSON.stringify(payload),
|
|
12
|
+
});
|
|
13
|
+
if (!response.ok) {
|
|
14
|
+
const error = await response
|
|
15
|
+
.json()
|
|
16
|
+
.catch(() => ({ error: "Unknown error" }));
|
|
17
|
+
throw new Error(`Failed to upload teleport: ${error.error || response.statusText}`);
|
|
18
|
+
}
|
|
19
|
+
return response.json();
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Fetch a teleport payload by ID
|
|
23
|
+
*/
|
|
24
|
+
export async function fetchTeleport(teleportId) {
|
|
25
|
+
const response = await fetch(`${API_BASE}/api/teleport/${teleportId}`);
|
|
26
|
+
if (!response.ok) {
|
|
27
|
+
if (response.status === 404) {
|
|
28
|
+
throw new Error("Teleport not found or expired");
|
|
29
|
+
}
|
|
30
|
+
throw new Error(`Failed to fetch teleport: ${response.statusText}`);
|
|
31
|
+
}
|
|
32
|
+
return response.json();
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Fetch return payload (messages added in web)
|
|
36
|
+
*/
|
|
37
|
+
export async function fetchReturnPayload(teleportId) {
|
|
38
|
+
const response = await fetch(`${API_BASE}/api/teleport/${teleportId}/return`);
|
|
39
|
+
if (!response.ok) {
|
|
40
|
+
if (response.status === 404) {
|
|
41
|
+
return null; // No return payload yet
|
|
42
|
+
}
|
|
43
|
+
throw new Error(`Failed to fetch return payload: ${response.statusText}`);
|
|
44
|
+
}
|
|
45
|
+
return response.json();
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Submit return payload (from web to CLI)
|
|
49
|
+
*/
|
|
50
|
+
export async function submitReturnPayload(teleportId, payload) {
|
|
51
|
+
const response = await fetch(`${API_BASE}/api/teleport/${teleportId}/return`, {
|
|
52
|
+
method: "POST",
|
|
53
|
+
headers: {
|
|
54
|
+
"Content-Type": "application/json",
|
|
55
|
+
},
|
|
56
|
+
body: JSON.stringify(payload),
|
|
57
|
+
});
|
|
58
|
+
if (!response.ok) {
|
|
59
|
+
throw new Error(`Failed to submit return payload: ${response.statusText}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=api.js.map
|
package/dist/api.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAMA,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,6BAA6B,CAAC;AAE/E;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAwB;IAExB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,eAAe,EAAE;QACvD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;KAC9B,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,QAAQ;aACzB,IAAI,EAAE;aACN,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC;QAC7C,MAAM,IAAI,KAAK,CACb,8BAA+B,KAA4B,CAAC,KAAK,IAAI,QAAQ,CAAC,UAAU,EAAE,CAC3F,CAAC;IACJ,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAA+B,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,UAAkB;IAElB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,iBAAiB,UAAU,EAAE,CAAC,CAAC;IAEvE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAA8B,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,UAAkB;IAElB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,iBAAiB,UAAU,SAAS,CAAC,CAAC;IAE9E,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,CAAC,wBAAwB;QACvC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,mCAAmC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAAoC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,UAAkB,EAClB,OAA8B;IAE9B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,QAAQ,iBAAiB,UAAU,SAAS,EAC/C;QACE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;KAC9B,CACF,CAAC;IAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,oCAAoC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { program } from "commander";
|
|
3
|
+
import open from "open";
|
|
4
|
+
import { listSessions, getCurrentSession, findSession, createTeleportPayload, } from "./session.js";
|
|
5
|
+
import { uploadTeleport, fetchTeleport, fetchReturnPayload } from "./api.js";
|
|
6
|
+
program
|
|
7
|
+
.name("teleport")
|
|
8
|
+
.description("Teleport Claude Code sessions to web for reading/refining")
|
|
9
|
+
.version("1.0.0");
|
|
10
|
+
program
|
|
11
|
+
.command("send")
|
|
12
|
+
.description("Teleport current or specified session to web")
|
|
13
|
+
.option("-s, --session <id>", "Session ID to teleport (default: most recent)")
|
|
14
|
+
.option("-e, --exchanges <n>", "Number of recent exchanges to include", "5")
|
|
15
|
+
.option("--no-summary", "Don't include summary of older context")
|
|
16
|
+
.option("--no-open", "Don't automatically open browser")
|
|
17
|
+
.action(async (options) => {
|
|
18
|
+
try {
|
|
19
|
+
let session;
|
|
20
|
+
if (options.session) {
|
|
21
|
+
session = await findSession(options.session);
|
|
22
|
+
if (!session) {
|
|
23
|
+
console.error(`Session not found: ${options.session}`);
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
session = await getCurrentSession();
|
|
29
|
+
if (!session) {
|
|
30
|
+
console.error("No sessions found. Run Claude Code first.");
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
console.log(`Teleporting session: ${session.firstPrompt.slice(0, 50)}...`);
|
|
35
|
+
console.log(` Project: ${session.projectPath}`);
|
|
36
|
+
const { payload, stats } = await createTeleportPayload(session, {
|
|
37
|
+
recentExchanges: parseInt(options.exchanges, 10),
|
|
38
|
+
includeSummary: options.summary,
|
|
39
|
+
});
|
|
40
|
+
const payloadSize = JSON.stringify(payload).length;
|
|
41
|
+
console.log(`\n Windowing:`);
|
|
42
|
+
console.log(` Total exchanges: ${stats.totalExchanges}`);
|
|
43
|
+
console.log(` Included: ${stats.includedExchanges} recent`);
|
|
44
|
+
if (stats.excludedExchanges > 0) {
|
|
45
|
+
console.log(` Summarized: ${stats.excludedExchanges} older`);
|
|
46
|
+
}
|
|
47
|
+
console.log(` Messages: ${payload.messages.length}`);
|
|
48
|
+
console.log(` Size: ${(payloadSize / 1024).toFixed(1)}KB`);
|
|
49
|
+
console.log(` Est. tokens: ~${stats.estimatedTokens.toLocaleString()}`);
|
|
50
|
+
console.log("\nUploading...");
|
|
51
|
+
const response = await uploadTeleport(payload);
|
|
52
|
+
console.log(`\n✓ Teleport ready!`);
|
|
53
|
+
console.log(` URL: ${response.url}`);
|
|
54
|
+
console.log(` Expires: ${new Date(response.expiresAt).toLocaleString()}`);
|
|
55
|
+
if (options.open) {
|
|
56
|
+
console.log("\nOpening in browser...");
|
|
57
|
+
await open(response.url);
|
|
58
|
+
}
|
|
59
|
+
console.log("\nRefine your conversation in the browser, then teleport back.");
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
console.error("Error:", error instanceof Error ? error.message : String(error));
|
|
63
|
+
process.exit(1);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
program
|
|
67
|
+
.command("receive <teleport-id>")
|
|
68
|
+
.description("Import a teleport return payload into CLI")
|
|
69
|
+
.action(async (teleportId) => {
|
|
70
|
+
try {
|
|
71
|
+
console.log(`Checking for return payload: ${teleportId}`);
|
|
72
|
+
const returnPayload = await fetchReturnPayload(teleportId);
|
|
73
|
+
if (!returnPayload) {
|
|
74
|
+
console.log("No return payload yet. Continue refining in the browser.");
|
|
75
|
+
console.log("Run this command again when ready to merge.");
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
console.log(`\n✓ Found ${returnPayload.newMessages.length} new messages!`);
|
|
79
|
+
console.log("\nNew messages from web:");
|
|
80
|
+
for (const msg of returnPayload.newMessages) {
|
|
81
|
+
const preview = msg.content.slice(0, 100) + (msg.content.length > 100 ? "..." : "");
|
|
82
|
+
console.log(` [${msg.role}] ${preview}`);
|
|
83
|
+
}
|
|
84
|
+
// TODO: Actually merge into local session JSONL
|
|
85
|
+
console.log("\n⚠ Note: Auto-merge not yet implemented.");
|
|
86
|
+
console.log("The new messages have been displayed above for manual reference.");
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
console.error("Error:", error instanceof Error ? error.message : String(error));
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
program
|
|
94
|
+
.command("list")
|
|
95
|
+
.description("List available sessions")
|
|
96
|
+
.option("-n, --limit <number>", "Number of sessions to show", "10")
|
|
97
|
+
.action(async (options) => {
|
|
98
|
+
try {
|
|
99
|
+
const sessions = await listSessions();
|
|
100
|
+
const limit = parseInt(options.limit, 10);
|
|
101
|
+
if (sessions.length === 0) {
|
|
102
|
+
console.log("No sessions found.");
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
console.log(`Recent sessions (showing ${Math.min(limit, sessions.length)} of ${sessions.length}):\n`);
|
|
106
|
+
for (const session of sessions.slice(0, limit)) {
|
|
107
|
+
const modified = new Date(session.modified).toLocaleString();
|
|
108
|
+
const prompt = session.firstPrompt.slice(0, 60);
|
|
109
|
+
console.log(`${session.sessionId.slice(0, 8)} ${modified}`);
|
|
110
|
+
console.log(` ${prompt}${session.firstPrompt.length > 60 ? "..." : ""}`);
|
|
111
|
+
console.log(` ${session.projectPath} (${session.messageCount} messages)`);
|
|
112
|
+
console.log();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
console.error("Error:", error instanceof Error ? error.message : String(error));
|
|
117
|
+
process.exit(1);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
program
|
|
121
|
+
.command("view <teleport-id>")
|
|
122
|
+
.description("View a teleport payload (for debugging)")
|
|
123
|
+
.action(async (teleportId) => {
|
|
124
|
+
try {
|
|
125
|
+
const payload = await fetchTeleport(teleportId);
|
|
126
|
+
console.log("Teleport Payload:");
|
|
127
|
+
console.log(` Session: ${payload.sessionId}`);
|
|
128
|
+
console.log(` Messages: ${payload.messages.length}`);
|
|
129
|
+
console.log(` Model: ${payload.model}`);
|
|
130
|
+
console.log(` Working Dir: ${payload.context.workingDirectory}`);
|
|
131
|
+
console.log(` Git Branch: ${payload.context.gitBranch || "(none)"}`);
|
|
132
|
+
console.log(` Created: ${payload.created}`);
|
|
133
|
+
console.log("\nMessages:");
|
|
134
|
+
for (const msg of payload.messages) {
|
|
135
|
+
const preview = msg.content.slice(0, 100) + (msg.content.length > 100 ? "..." : "");
|
|
136
|
+
const time = new Date(msg.timestamp).toLocaleTimeString();
|
|
137
|
+
console.log(` [${time}] ${msg.role}: ${preview}`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
console.error("Error:", error instanceof Error ? error.message : String(error));
|
|
142
|
+
process.exit(1);
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
// Default command (no subcommand) - same as 'send'
|
|
146
|
+
program
|
|
147
|
+
.argument("[session-id]", "Session ID to teleport (default: most recent)")
|
|
148
|
+
.option("--no-open", "Don't automatically open browser")
|
|
149
|
+
.action(async (sessionId, _options) => {
|
|
150
|
+
// If no arguments and no options, show help
|
|
151
|
+
if (!sessionId && process.argv.length === 2) {
|
|
152
|
+
program.help();
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
// Otherwise, run send command
|
|
156
|
+
await program.commands
|
|
157
|
+
.find((c) => c.name() === "send")
|
|
158
|
+
.parseAsync(sessionId
|
|
159
|
+
? ["node", "teleport", "send", "-s", sessionId]
|
|
160
|
+
: ["node", "teleport", "send"]);
|
|
161
|
+
});
|
|
162
|
+
program.parse();
|
|
163
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { ClaudeSessionMessage, SessionEntry, TeleportMessage, TeleportPayload } from "./types.js";
|
|
2
|
+
export interface TeleportOptions {
|
|
3
|
+
recentExchanges: number;
|
|
4
|
+
includeSummary: boolean;
|
|
5
|
+
maxTokens: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Get list of all available sessions across all projects
|
|
9
|
+
*/
|
|
10
|
+
export declare function listSessions(): Promise<SessionEntry[]>;
|
|
11
|
+
/**
|
|
12
|
+
* Get the most recent session
|
|
13
|
+
*/
|
|
14
|
+
export declare function getMostRecentSession(): Promise<SessionEntry | null>;
|
|
15
|
+
/**
|
|
16
|
+
* Find a session by ID
|
|
17
|
+
*/
|
|
18
|
+
export declare function findSession(sessionId: string): Promise<SessionEntry | null>;
|
|
19
|
+
/**
|
|
20
|
+
* Read and parse a session's JSONL file
|
|
21
|
+
*/
|
|
22
|
+
export declare function readSessionMessages(sessionPath: string): Promise<ClaudeSessionMessage[]>;
|
|
23
|
+
/**
|
|
24
|
+
* Convert Claude session messages to teleport format
|
|
25
|
+
*/
|
|
26
|
+
export declare function convertToTeleportMessages(messages: ClaudeSessionMessage[]): TeleportMessage[];
|
|
27
|
+
/**
|
|
28
|
+
* Apply exchange windowing to reduce payload size
|
|
29
|
+
*/
|
|
30
|
+
export declare function applyExchangeWindowing(messages: TeleportMessage[], options?: TeleportOptions): {
|
|
31
|
+
messages: TeleportMessage[];
|
|
32
|
+
summary: string | null;
|
|
33
|
+
stats: WindowingStats;
|
|
34
|
+
};
|
|
35
|
+
export interface WindowingStats {
|
|
36
|
+
totalExchanges: number;
|
|
37
|
+
includedExchanges: number;
|
|
38
|
+
excludedExchanges: number;
|
|
39
|
+
estimatedTokens: number;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Create a teleport payload from a session with exchange windowing
|
|
43
|
+
*/
|
|
44
|
+
export declare function createTeleportPayload(session: SessionEntry, options?: Partial<TeleportOptions>): Promise<{
|
|
45
|
+
payload: TeleportPayload;
|
|
46
|
+
stats: WindowingStats;
|
|
47
|
+
}>;
|
|
48
|
+
/**
|
|
49
|
+
* Get current session from environment or most recent
|
|
50
|
+
*/
|
|
51
|
+
export declare function getCurrentSession(): Promise<SessionEntry | null>;
|
|
52
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,oBAAoB,EAGpB,YAAY,EACZ,eAAe,EACf,eAAe,EAChB,MAAM,YAAY,CAAC;AAMpB,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAcD;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CA0B5D;AAED;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAGzE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAG9B;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAmBjC;AAmLD;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,oBAAoB,EAAE,GAC/B,eAAe,EAAE,CAgCnB;AA2ED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,eAAe,EAAE,EAC3B,OAAO,GAAE,eAAiC,GACzC;IACD,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,cAAc,CAAC;CACvB,CAoDA;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,YAAY,EACrB,OAAO,GAAE,OAAO,CAAC,eAAe,CAAM,GACrC,OAAO,CAAC;IAAE,OAAO,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,cAAc,CAAA;CAAE,CAAC,CA4C9D;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAUtE"}
|
package/dist/session.js
ADDED
|
@@ -0,0 +1,422 @@
|
|
|
1
|
+
import { readFile, readdir } from "node:fs/promises";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
const CLAUDE_DIR = join(homedir(), ".claude");
|
|
6
|
+
const PROJECTS_DIR = join(CLAUDE_DIR, "projects");
|
|
7
|
+
const DEFAULT_OPTIONS = {
|
|
8
|
+
recentExchanges: 5,
|
|
9
|
+
includeSummary: true,
|
|
10
|
+
maxTokens: 10000,
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Get list of all available sessions across all projects
|
|
14
|
+
*/
|
|
15
|
+
export async function listSessions() {
|
|
16
|
+
const allSessions = [];
|
|
17
|
+
if (!existsSync(PROJECTS_DIR)) {
|
|
18
|
+
return allSessions;
|
|
19
|
+
}
|
|
20
|
+
const projectDirs = await readdir(PROJECTS_DIR);
|
|
21
|
+
for (const projectDir of projectDirs) {
|
|
22
|
+
const indexPath = join(PROJECTS_DIR, projectDir, "sessions-index.json");
|
|
23
|
+
if (existsSync(indexPath)) {
|
|
24
|
+
try {
|
|
25
|
+
const indexContent = await readFile(indexPath, "utf-8");
|
|
26
|
+
const index = JSON.parse(indexContent);
|
|
27
|
+
allSessions.push(...index.entries);
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
// Skip malformed index files
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// Sort by modified date, most recent first
|
|
35
|
+
return allSessions.sort((a, b) => new Date(b.modified).getTime() - new Date(a.modified).getTime());
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get the most recent session
|
|
39
|
+
*/
|
|
40
|
+
export async function getMostRecentSession() {
|
|
41
|
+
const sessions = await listSessions();
|
|
42
|
+
return sessions[0] || null;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Find a session by ID
|
|
46
|
+
*/
|
|
47
|
+
export async function findSession(sessionId) {
|
|
48
|
+
const sessions = await listSessions();
|
|
49
|
+
return sessions.find((s) => s.sessionId === sessionId) || null;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Read and parse a session's JSONL file
|
|
53
|
+
*/
|
|
54
|
+
export async function readSessionMessages(sessionPath) {
|
|
55
|
+
const content = await readFile(sessionPath, "utf-8");
|
|
56
|
+
const lines = content.trim().split("\n");
|
|
57
|
+
const messages = [];
|
|
58
|
+
for (const line of lines) {
|
|
59
|
+
if (!line.trim())
|
|
60
|
+
continue;
|
|
61
|
+
try {
|
|
62
|
+
const msg = JSON.parse(line);
|
|
63
|
+
// Only include actual user/assistant messages, not tool results embedded in user messages
|
|
64
|
+
if (msg.type === "user" || msg.type === "assistant") {
|
|
65
|
+
messages.push(msg);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// Skip malformed lines
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return messages;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Extract readable text content from a message
|
|
76
|
+
*/
|
|
77
|
+
function extractTextContent(content) {
|
|
78
|
+
if (typeof content === "string") {
|
|
79
|
+
return content;
|
|
80
|
+
}
|
|
81
|
+
const textParts = [];
|
|
82
|
+
for (const block of content) {
|
|
83
|
+
if (block.type === "text") {
|
|
84
|
+
textParts.push(block.text);
|
|
85
|
+
}
|
|
86
|
+
else if (block.type === "tool_use") {
|
|
87
|
+
// Include tool use as summary
|
|
88
|
+
textParts.push(`[Tool: ${block.name}]`);
|
|
89
|
+
}
|
|
90
|
+
// Skip thinking blocks and tool results for readability
|
|
91
|
+
}
|
|
92
|
+
return textParts.join("\n\n");
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Check if message content is noise that should be filtered
|
|
96
|
+
*/
|
|
97
|
+
function isNoiseMessage(content) {
|
|
98
|
+
const noisePatterns = [
|
|
99
|
+
/^\[Request interrupted by user/i,
|
|
100
|
+
/^<task-notification>/i,
|
|
101
|
+
/^<system-reminder>/i,
|
|
102
|
+
/^Background command .* (completed|failed)/i,
|
|
103
|
+
/^Read the output file to retrieve the result:/i,
|
|
104
|
+
/\/private\/tmp\/claude\//,
|
|
105
|
+
/\.output\s+(completed|failed)/,
|
|
106
|
+
/^\[Tool: \w+\]$/, // Bare tool calls with no other content
|
|
107
|
+
];
|
|
108
|
+
const trimmed = content.trim();
|
|
109
|
+
return noisePatterns.some((pattern) => pattern.test(trimmed));
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Check if assistant message is low-value filler (e.g., "Let me check...")
|
|
113
|
+
*/
|
|
114
|
+
function isFillerMessage(content) {
|
|
115
|
+
const trimmed = content.trim();
|
|
116
|
+
// Must be short to be considered filler (longer messages have substance)
|
|
117
|
+
if (trimmed.length > 200)
|
|
118
|
+
return false;
|
|
119
|
+
const fillerPatterns = [
|
|
120
|
+
// "Let me X" / "I'll X" patterns
|
|
121
|
+
/^(Let me|I'll|I will|I'm going to|I need to|I should) (check|read|look|explore|search|examine|review|find|see|verify|investigate|analyze|start|continue|begin)/i,
|
|
122
|
+
// "Looking at" / "Reading" patterns
|
|
123
|
+
/^(Looking at|Reading|Checking|Exploring|Searching|Examining|Reviewing|Finding|Investigating|Analyzing|Starting|Continuing)/i,
|
|
124
|
+
// "Now I'll" patterns
|
|
125
|
+
/^Now (let me|I'll|I will|I'm going to)/i,
|
|
126
|
+
// Short tool-only messages
|
|
127
|
+
/^(\[Tool: \w+\]\s*)+$/,
|
|
128
|
+
// Just acknowledgments
|
|
129
|
+
/^(OK|Okay|Sure|Alright|Got it|Understood)[.,!]?\s*$/i,
|
|
130
|
+
];
|
|
131
|
+
return fillerPatterns.some((pattern) => pattern.test(trimmed));
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Check if message is a Claude context compaction summary
|
|
135
|
+
*/
|
|
136
|
+
function isCompactionSummary(content) {
|
|
137
|
+
const compactionPatterns = [
|
|
138
|
+
/^This session is being continued from a previous conversation/i,
|
|
139
|
+
/^This conversation is being continued from a previous session/i,
|
|
140
|
+
/^The summary below covers the earlier portion/i,
|
|
141
|
+
/^If you need specific details from before compaction/i,
|
|
142
|
+
];
|
|
143
|
+
return compactionPatterns.some((pattern) => pattern.test(content.trim()));
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Condense a compaction summary to just the key info
|
|
147
|
+
*/
|
|
148
|
+
function condenseCompactionSummary(content) {
|
|
149
|
+
// Extract just the "Primary Request and Intent" or "Current Work" sections if present
|
|
150
|
+
const sections = [
|
|
151
|
+
/Primary Request and Intent[:\s]*([\s\S]*?)(?=Key Technical|Files and Code|Problem Solving|$)/i,
|
|
152
|
+
/Current Work[:\s]*([\s\S]*?)(?=Key Technical|Files and Code|Problem Solving|Optional Next|$)/i,
|
|
153
|
+
/Pending Tasks[:\s]*([\s\S]*?)(?=Current Work|Optional Next|$)/i,
|
|
154
|
+
];
|
|
155
|
+
const extracted = [];
|
|
156
|
+
for (const pattern of sections) {
|
|
157
|
+
const match = content.match(pattern);
|
|
158
|
+
if (match && match[1]) {
|
|
159
|
+
const section = match[1].trim();
|
|
160
|
+
if (section.length > 20 && section.length < 500) {
|
|
161
|
+
extracted.push(section);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
if (extracted.length > 0) {
|
|
166
|
+
return `[Compacted context: ${extracted.slice(0, 2).join(" | ")}]`.slice(0, 300);
|
|
167
|
+
}
|
|
168
|
+
// If no sections found, return null to skip entirely
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Clean message content by removing system tags
|
|
173
|
+
*/
|
|
174
|
+
function cleanMessageContent(content) {
|
|
175
|
+
return content
|
|
176
|
+
.replace(/<system-reminder>[\s\S]*?<\/system-reminder>/g, "")
|
|
177
|
+
.replace(/<task-notification>[\s\S]*?<\/task-notification>/g, "")
|
|
178
|
+
.trim();
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Truncate large code blocks to save tokens
|
|
182
|
+
*/
|
|
183
|
+
function truncateCodeBlocks(content, maxLines = 15) {
|
|
184
|
+
// Match fenced code blocks: ```lang\ncode\n```
|
|
185
|
+
const codeBlockRegex = /```(\w*)\n([\s\S]*?)```/g;
|
|
186
|
+
return content.replace(codeBlockRegex, (match, lang, code) => {
|
|
187
|
+
const lines = code.split("\n");
|
|
188
|
+
const lineCount = lines.length;
|
|
189
|
+
// Keep small code blocks as-is
|
|
190
|
+
if (lineCount <= maxLines) {
|
|
191
|
+
return match;
|
|
192
|
+
}
|
|
193
|
+
// Detect language from content if not specified
|
|
194
|
+
const detectedLang = lang || detectLanguage(code);
|
|
195
|
+
// Extract first few lines for context
|
|
196
|
+
const preview = lines.slice(0, 5).join("\n");
|
|
197
|
+
// Create truncated block with summary
|
|
198
|
+
return `\`\`\`${detectedLang}\n${preview}\n// ... ${lineCount - 5} more lines truncated\n\`\`\`\n[Code block: ${detectedLang || "code"}, ${lineCount} lines]`;
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Simple language detection from code content
|
|
203
|
+
*/
|
|
204
|
+
function detectLanguage(code) {
|
|
205
|
+
const patterns = [
|
|
206
|
+
[
|
|
207
|
+
/^import .* from ['"]|^export (const|function|class|interface|type)/m,
|
|
208
|
+
"typescript",
|
|
209
|
+
],
|
|
210
|
+
[/^const |^let |^var |^function |=>\s*{/m, "javascript"],
|
|
211
|
+
[/^def |^class |^import |^from .* import/m, "python"],
|
|
212
|
+
[/^package |^func |^import "/m, "go"],
|
|
213
|
+
[/^use |^fn |^let mut |^impl /m, "rust"],
|
|
214
|
+
[/<\/?[a-z][\s\S]*>/i, "html"],
|
|
215
|
+
[/^\s*\{[\s\S]*"[\w]+":/m, "json"],
|
|
216
|
+
[/^#!\/(bin|usr)/m, "bash"],
|
|
217
|
+
];
|
|
218
|
+
for (const [pattern, lang] of patterns) {
|
|
219
|
+
if (pattern.test(code))
|
|
220
|
+
return lang;
|
|
221
|
+
}
|
|
222
|
+
return "";
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Convert Claude session messages to teleport format
|
|
226
|
+
*/
|
|
227
|
+
export function convertToTeleportMessages(messages) {
|
|
228
|
+
const result = [];
|
|
229
|
+
for (const msg of messages) {
|
|
230
|
+
if (msg.isSidechain)
|
|
231
|
+
continue; // Skip sub-agent messages
|
|
232
|
+
let content = cleanMessageContent(extractTextContent(msg.message.content));
|
|
233
|
+
if (!content.trim())
|
|
234
|
+
continue;
|
|
235
|
+
if (isNoiseMessage(content))
|
|
236
|
+
continue;
|
|
237
|
+
// Filter low-value filler messages from assistant
|
|
238
|
+
if (msg.type === "assistant" && isFillerMessage(content))
|
|
239
|
+
continue;
|
|
240
|
+
// Handle verbose compaction summaries
|
|
241
|
+
if (isCompactionSummary(content)) {
|
|
242
|
+
const condensed = condenseCompactionSummary(content);
|
|
243
|
+
if (!condensed)
|
|
244
|
+
continue; // Skip if can't extract useful info
|
|
245
|
+
content = condensed;
|
|
246
|
+
}
|
|
247
|
+
// Truncate large code blocks to save tokens
|
|
248
|
+
content = truncateCodeBlocks(content);
|
|
249
|
+
result.push({
|
|
250
|
+
role: msg.type,
|
|
251
|
+
content,
|
|
252
|
+
timestamp: msg.timestamp,
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
return result;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Group messages into exchanges (user message + assistant response pairs)
|
|
259
|
+
*/
|
|
260
|
+
function groupIntoExchanges(messages) {
|
|
261
|
+
const exchanges = [];
|
|
262
|
+
let currentExchange = {};
|
|
263
|
+
for (const msg of messages) {
|
|
264
|
+
if (msg.role === "user") {
|
|
265
|
+
// Start new exchange
|
|
266
|
+
if (currentExchange.user) {
|
|
267
|
+
// Previous exchange had no response, save it anyway
|
|
268
|
+
exchanges.push({
|
|
269
|
+
user: currentExchange.user,
|
|
270
|
+
assistant: currentExchange.assistant || null,
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
currentExchange = { user: msg };
|
|
274
|
+
}
|
|
275
|
+
else if (msg.role === "assistant" && currentExchange.user) {
|
|
276
|
+
// Complete the exchange
|
|
277
|
+
currentExchange.assistant = msg;
|
|
278
|
+
exchanges.push({
|
|
279
|
+
user: currentExchange.user,
|
|
280
|
+
assistant: currentExchange.assistant,
|
|
281
|
+
});
|
|
282
|
+
currentExchange = {};
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
// Handle trailing user message without response
|
|
286
|
+
if (currentExchange.user) {
|
|
287
|
+
exchanges.push({
|
|
288
|
+
user: currentExchange.user,
|
|
289
|
+
assistant: currentExchange.assistant || null,
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
return exchanges;
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Generate a brief summary of older exchanges
|
|
296
|
+
*/
|
|
297
|
+
function generateContextSummary(exchanges) {
|
|
298
|
+
if (exchanges.length === 0)
|
|
299
|
+
return "";
|
|
300
|
+
// Extract key topics from user messages
|
|
301
|
+
const topics = [];
|
|
302
|
+
for (const ex of exchanges.slice(0, 10)) {
|
|
303
|
+
// Sample first 10 exchanges
|
|
304
|
+
const content = ex.user.content.toLowerCase();
|
|
305
|
+
// Extract first sentence or first 100 chars as topic hint
|
|
306
|
+
const firstSentence = content.split(/[.!?\n]/)[0].trim();
|
|
307
|
+
if (firstSentence.length > 10 && firstSentence.length < 100) {
|
|
308
|
+
topics.push(firstSentence);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
if (topics.length === 0) {
|
|
312
|
+
return `[Prior context: ${exchanges.length} earlier exchanges in this session]`;
|
|
313
|
+
}
|
|
314
|
+
const topicList = topics.slice(0, 3).join("; ");
|
|
315
|
+
return `[Prior context: ${exchanges.length} earlier exchanges including: ${topicList}...]`;
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Estimate token count (rough: 1 token ≈ 4 chars)
|
|
319
|
+
*/
|
|
320
|
+
function estimateTokens(text) {
|
|
321
|
+
return Math.ceil(text.length / 4);
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Apply exchange windowing to reduce payload size
|
|
325
|
+
*/
|
|
326
|
+
export function applyExchangeWindowing(messages, options = DEFAULT_OPTIONS) {
|
|
327
|
+
const exchanges = groupIntoExchanges(messages);
|
|
328
|
+
const stats = {
|
|
329
|
+
totalExchanges: exchanges.length,
|
|
330
|
+
includedExchanges: 0,
|
|
331
|
+
excludedExchanges: 0,
|
|
332
|
+
estimatedTokens: 0,
|
|
333
|
+
};
|
|
334
|
+
// If few enough exchanges, include all
|
|
335
|
+
if (exchanges.length <= options.recentExchanges) {
|
|
336
|
+
stats.includedExchanges = exchanges.length;
|
|
337
|
+
stats.estimatedTokens = estimateTokens(JSON.stringify(messages));
|
|
338
|
+
return { messages, summary: null, stats };
|
|
339
|
+
}
|
|
340
|
+
// Split into older (to summarize) and recent (to include fully)
|
|
341
|
+
const olderExchanges = exchanges.slice(0, -options.recentExchanges);
|
|
342
|
+
const recentExchanges = exchanges.slice(-options.recentExchanges);
|
|
343
|
+
stats.excludedExchanges = olderExchanges.length;
|
|
344
|
+
stats.includedExchanges = recentExchanges.length;
|
|
345
|
+
// Generate summary of older context
|
|
346
|
+
const summary = options.includeSummary
|
|
347
|
+
? generateContextSummary(olderExchanges)
|
|
348
|
+
: null;
|
|
349
|
+
// Flatten recent exchanges back to messages
|
|
350
|
+
const windowedMessages = [];
|
|
351
|
+
// Add summary as a synthetic "context" message if present
|
|
352
|
+
// Mark with special prefix so viewer can style it differently
|
|
353
|
+
if (summary) {
|
|
354
|
+
windowedMessages.push({
|
|
355
|
+
role: "assistant",
|
|
356
|
+
content: `__CONTEXT_SUMMARY__${summary}`,
|
|
357
|
+
timestamp: recentExchanges[0]?.user.timestamp || Date.now(),
|
|
358
|
+
});
|
|
359
|
+
}
|
|
360
|
+
for (const ex of recentExchanges) {
|
|
361
|
+
windowedMessages.push(ex.user);
|
|
362
|
+
if (ex.assistant) {
|
|
363
|
+
windowedMessages.push(ex.assistant);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
stats.estimatedTokens = estimateTokens(JSON.stringify(windowedMessages));
|
|
367
|
+
return { messages: windowedMessages, summary, stats };
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Create a teleport payload from a session with exchange windowing
|
|
371
|
+
*/
|
|
372
|
+
export async function createTeleportPayload(session, options = {}) {
|
|
373
|
+
const opts = { ...DEFAULT_OPTIONS, ...options };
|
|
374
|
+
const messages = await readSessionMessages(session.fullPath);
|
|
375
|
+
const teleportMessages = convertToTeleportMessages(messages);
|
|
376
|
+
// Apply exchange windowing to reduce size
|
|
377
|
+
const { messages: windowedMessages, stats } = applyExchangeWindowing(teleportMessages, opts);
|
|
378
|
+
// Extract model from last assistant message if available
|
|
379
|
+
let model = "claude-sonnet-4-20250514";
|
|
380
|
+
const lastAssistant = messages
|
|
381
|
+
.slice()
|
|
382
|
+
.reverse()
|
|
383
|
+
.find((m) => m.type === "assistant");
|
|
384
|
+
if (lastAssistant && "requestId" in lastAssistant) {
|
|
385
|
+
// Try to extract model from message metadata
|
|
386
|
+
const msgAny = lastAssistant;
|
|
387
|
+
if (msgAny.message &&
|
|
388
|
+
typeof msgAny.message === "object" &&
|
|
389
|
+
"model" in msgAny.message) {
|
|
390
|
+
model = msgAny.message.model;
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
const payload = {
|
|
394
|
+
version: "1.0",
|
|
395
|
+
sessionId: session.sessionId,
|
|
396
|
+
branchPoint: windowedMessages.length,
|
|
397
|
+
messages: windowedMessages,
|
|
398
|
+
context: {
|
|
399
|
+
workingDirectory: session.projectPath,
|
|
400
|
+
gitBranch: session.gitBranch || undefined,
|
|
401
|
+
summary: session.firstPrompt,
|
|
402
|
+
},
|
|
403
|
+
model,
|
|
404
|
+
created: new Date().toISOString(),
|
|
405
|
+
};
|
|
406
|
+
return { payload, stats };
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Get current session from environment or most recent
|
|
410
|
+
*/
|
|
411
|
+
export async function getCurrentSession() {
|
|
412
|
+
// Check if we're in a Claude Code session (would have CLAUDE_SESSION_ID env var)
|
|
413
|
+
const currentSessionId = process.env.CLAUDE_SESSION_ID;
|
|
414
|
+
if (currentSessionId) {
|
|
415
|
+
const session = await findSession(currentSessionId);
|
|
416
|
+
if (session)
|
|
417
|
+
return session;
|
|
418
|
+
}
|
|
419
|
+
// Fall back to most recent session
|
|
420
|
+
return getMostRecentSession();
|
|
421
|
+
}
|
|
422
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
export interface TeleportPayload {
|
|
2
|
+
version: "1.0";
|
|
3
|
+
sessionId: string;
|
|
4
|
+
branchPoint: number;
|
|
5
|
+
messages: TeleportMessage[];
|
|
6
|
+
context: {
|
|
7
|
+
workingDirectory: string;
|
|
8
|
+
gitBranch?: string;
|
|
9
|
+
summary?: string;
|
|
10
|
+
};
|
|
11
|
+
model: string;
|
|
12
|
+
created: string;
|
|
13
|
+
}
|
|
14
|
+
export interface TeleportMessage {
|
|
15
|
+
role: "user" | "assistant";
|
|
16
|
+
content: string;
|
|
17
|
+
timestamp: number;
|
|
18
|
+
}
|
|
19
|
+
export interface TeleportReturnPayload {
|
|
20
|
+
version: "1.0";
|
|
21
|
+
sessionId: string;
|
|
22
|
+
branchPoint: number;
|
|
23
|
+
newMessages: TeleportMessage[];
|
|
24
|
+
}
|
|
25
|
+
export interface ClaudeSessionMessage {
|
|
26
|
+
parentUuid?: string;
|
|
27
|
+
isSidechain?: boolean;
|
|
28
|
+
userType?: string;
|
|
29
|
+
cwd?: string;
|
|
30
|
+
sessionId: string;
|
|
31
|
+
version?: string;
|
|
32
|
+
gitBranch?: string;
|
|
33
|
+
type: "user" | "assistant";
|
|
34
|
+
message: {
|
|
35
|
+
role: "user" | "assistant";
|
|
36
|
+
content: string | ContentBlock[];
|
|
37
|
+
};
|
|
38
|
+
uuid: string;
|
|
39
|
+
timestamp: number;
|
|
40
|
+
}
|
|
41
|
+
export type ContentBlock = {
|
|
42
|
+
type: "text";
|
|
43
|
+
text: string;
|
|
44
|
+
} | {
|
|
45
|
+
type: "thinking";
|
|
46
|
+
thinking: string;
|
|
47
|
+
} | {
|
|
48
|
+
type: "tool_use";
|
|
49
|
+
id: string;
|
|
50
|
+
name: string;
|
|
51
|
+
input: Record<string, unknown>;
|
|
52
|
+
} | {
|
|
53
|
+
type: "tool_result";
|
|
54
|
+
tool_use_id: string;
|
|
55
|
+
content: string;
|
|
56
|
+
};
|
|
57
|
+
export interface SessionIndex {
|
|
58
|
+
version: number;
|
|
59
|
+
entries: SessionEntry[];
|
|
60
|
+
}
|
|
61
|
+
export interface SessionEntry {
|
|
62
|
+
sessionId: string;
|
|
63
|
+
fullPath: string;
|
|
64
|
+
fileMtime: number;
|
|
65
|
+
firstPrompt: string;
|
|
66
|
+
messageCount: number;
|
|
67
|
+
created: string;
|
|
68
|
+
modified: string;
|
|
69
|
+
customTitle?: string;
|
|
70
|
+
gitBranch?: string;
|
|
71
|
+
projectPath: string;
|
|
72
|
+
isSidechain: boolean;
|
|
73
|
+
}
|
|
74
|
+
export interface TeleportResponse {
|
|
75
|
+
teleportId: string;
|
|
76
|
+
url: string;
|
|
77
|
+
expiresAt: string;
|
|
78
|
+
}
|
|
79
|
+
export interface TeleportError {
|
|
80
|
+
error: string;
|
|
81
|
+
code: string;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,KAAK,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,OAAO,EAAE;QACP,gBAAgB,EAAE,MAAM,CAAC;QACzB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,KAAK,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,eAAe,EAAE,CAAC;CAChC;AAID,MAAM,WAAW,oBAAoB;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;QAC3B,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;KAClC,CAAC;IACF,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACtC;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,GACD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAElE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB;AAID,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,yBAAyB"}
|
package/package.json
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@claude-tools-i-use/teleport",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Teleport Claude Code CLI sessions to web for reading/refining",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"teleport": "./dist/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"build": "tsc",
|
|
11
|
+
"dev": "tsc --watch",
|
|
12
|
+
"start": "node dist/cli.js",
|
|
13
|
+
"deploy": "wrangler deploy",
|
|
14
|
+
"clean": "rm -rf dist",
|
|
15
|
+
"lint": "tsc --noEmit"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"claude",
|
|
19
|
+
"claude-code",
|
|
20
|
+
"teleport",
|
|
21
|
+
"ai-tools"
|
|
22
|
+
],
|
|
23
|
+
"author": "Josh Duffy",
|
|
24
|
+
"license": "MIT",
|
|
25
|
+
"files": [
|
|
26
|
+
"dist"
|
|
27
|
+
],
|
|
28
|
+
"repository": {
|
|
29
|
+
"type": "git",
|
|
30
|
+
"url": "https://github.com/joshduffy/claude-tools.git",
|
|
31
|
+
"directory": "packages/teleport"
|
|
32
|
+
},
|
|
33
|
+
"homepage": "https://joshduffy.dev/tools/teleport",
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"@cloudflare/workers-types": "^4.20241218.0",
|
|
36
|
+
"@types/node": "^22.10.0",
|
|
37
|
+
"typescript": "^5.7.0",
|
|
38
|
+
"wrangler": "^3.99.0"
|
|
39
|
+
},
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"commander": "^12.1.0",
|
|
42
|
+
"open": "^10.1.0"
|
|
43
|
+
}
|
|
44
|
+
}
|