forkoff 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.
Files changed (56) hide show
  1. package/LICENSE +17 -0
  2. package/README.md +173 -0
  3. package/dist/api.d.ts +44 -0
  4. package/dist/api.d.ts.map +1 -0
  5. package/dist/api.js +76 -0
  6. package/dist/api.js.map +1 -0
  7. package/dist/approval.d.ts +46 -0
  8. package/dist/approval.d.ts.map +1 -0
  9. package/dist/approval.js +119 -0
  10. package/dist/approval.js.map +1 -0
  11. package/dist/config.d.ts +36 -0
  12. package/dist/config.d.ts.map +1 -0
  13. package/dist/config.js +209 -0
  14. package/dist/config.js.map +1 -0
  15. package/dist/index.d.ts +3 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +868 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/integration.d.ts +30 -0
  20. package/dist/integration.d.ts.map +1 -0
  21. package/dist/integration.js +84 -0
  22. package/dist/integration.js.map +1 -0
  23. package/dist/terminal.d.ts +25 -0
  24. package/dist/terminal.d.ts.map +1 -0
  25. package/dist/terminal.js +171 -0
  26. package/dist/terminal.js.map +1 -0
  27. package/dist/tools/claude-hooks.d.ts +97 -0
  28. package/dist/tools/claude-hooks.d.ts.map +1 -0
  29. package/dist/tools/claude-hooks.js +348 -0
  30. package/dist/tools/claude-hooks.js.map +1 -0
  31. package/dist/tools/claude-process.d.ts +271 -0
  32. package/dist/tools/claude-process.d.ts.map +1 -0
  33. package/dist/tools/claude-process.js +931 -0
  34. package/dist/tools/claude-process.js.map +1 -0
  35. package/dist/tools/claude-sessions.d.ts +60 -0
  36. package/dist/tools/claude-sessions.d.ts.map +1 -0
  37. package/dist/tools/claude-sessions.js +285 -0
  38. package/dist/tools/claude-sessions.js.map +1 -0
  39. package/dist/tools/detector.d.ts +64 -0
  40. package/dist/tools/detector.d.ts.map +1 -0
  41. package/dist/tools/detector.js +383 -0
  42. package/dist/tools/detector.js.map +1 -0
  43. package/dist/tools/index.d.ts +8 -0
  44. package/dist/tools/index.d.ts.map +1 -0
  45. package/dist/tools/index.js +15 -0
  46. package/dist/tools/index.js.map +1 -0
  47. package/dist/transcript-streamer.d.ts +68 -0
  48. package/dist/transcript-streamer.d.ts.map +1 -0
  49. package/dist/transcript-streamer.js +459 -0
  50. package/dist/transcript-streamer.js.map +1 -0
  51. package/dist/websocket.d.ts +133 -0
  52. package/dist/websocket.d.ts.map +1 -0
  53. package/dist/websocket.js +247 -0
  54. package/dist/websocket.js.map +1 -0
  55. package/nul +0 -0
  56. package/package.json +54 -0
@@ -0,0 +1,459 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.transcriptStreamer = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const readline = __importStar(require("readline"));
39
+ const events_1 = require("events");
40
+ const chokidar = __importStar(require("chokidar"));
41
+ class TranscriptStreamer extends events_1.EventEmitter {
42
+ constructor() {
43
+ super(...arguments);
44
+ this.watchers = new Map();
45
+ this.fileSizes = new Map();
46
+ this.lastLineNumbers = new Map();
47
+ this.processingLock = new Map(); // Prevent concurrent reads
48
+ }
49
+ /**
50
+ * Fetch transcript history from a JSONL file
51
+ * Supports reverse pagination: offset 0 = most recent entries
52
+ */
53
+ async fetchHistory(transcriptPath, offset = 0, limit = 100, reverse = true // Default to reverse (most recent first for initial load)
54
+ ) {
55
+ return new Promise((resolve, reject) => {
56
+ if (!fs.existsSync(transcriptPath)) {
57
+ return resolve({ entries: [], totalEntries: 0, hasMore: false });
58
+ }
59
+ const allEntries = [];
60
+ let lineNumber = 0;
61
+ const fileStream = fs.createReadStream(transcriptPath, { encoding: 'utf8' });
62
+ const rl = readline.createInterface({
63
+ input: fileStream,
64
+ crlfDelay: Infinity,
65
+ });
66
+ rl.on('line', (line) => {
67
+ lineNumber++;
68
+ const entry = this.parseEntry(line, lineNumber);
69
+ if (entry) {
70
+ allEntries.push(entry);
71
+ }
72
+ });
73
+ rl.on('close', () => {
74
+ this.lastLineNumbers.set(transcriptPath, lineNumber);
75
+ const totalEntries = allEntries.length;
76
+ let resultEntries;
77
+ let hasMore;
78
+ if (reverse) {
79
+ // Reverse pagination: offset 0 = last N entries
80
+ // offset 400 = entries before the last 400
81
+ const startIndex = Math.max(0, totalEntries - offset - limit);
82
+ const endIndex = Math.max(0, totalEntries - offset);
83
+ resultEntries = allEntries.slice(startIndex, endIndex);
84
+ hasMore = startIndex > 0;
85
+ }
86
+ else {
87
+ // Forward pagination: offset 0 = first N entries
88
+ const startIndex = offset;
89
+ const endIndex = Math.min(totalEntries, offset + limit);
90
+ resultEntries = allEntries.slice(startIndex, endIndex);
91
+ hasMore = endIndex < totalEntries;
92
+ }
93
+ resolve({
94
+ entries: resultEntries,
95
+ totalEntries,
96
+ hasMore,
97
+ });
98
+ });
99
+ rl.on('error', (error) => {
100
+ reject(error);
101
+ });
102
+ });
103
+ }
104
+ /**
105
+ * Subscribe to live updates from a transcript file
106
+ */
107
+ subscribeToUpdates(sessionKey, transcriptPath) {
108
+ // Unsubscribe if already subscribed
109
+ this.unsubscribeFromUpdates(sessionKey);
110
+ console.log(`[Transcript] subscribeToUpdates: sessionKey=${sessionKey}, path=${transcriptPath}`);
111
+ if (!fs.existsSync(transcriptPath)) {
112
+ console.log(`[Transcript] File does not exist: ${transcriptPath}`);
113
+ return;
114
+ }
115
+ // Get initial file size
116
+ const stats = fs.statSync(transcriptPath);
117
+ this.fileSizes.set(sessionKey, stats.size);
118
+ console.log(`[Transcript] Initial file size: ${stats.size}`);
119
+ // Initialize last line number if not set
120
+ const existingLineNumber = this.lastLineNumbers.get(transcriptPath);
121
+ console.log(`[Transcript] Existing lastLineNumber for path: ${existingLineNumber}`);
122
+ if (!this.lastLineNumbers.has(transcriptPath)) {
123
+ this.lastLineNumbers.set(transcriptPath, 0);
124
+ console.log(`[Transcript] Initialized lastLineNumber to 0`);
125
+ }
126
+ // Watch the file for changes - faster polling for real-time updates
127
+ const watcher = chokidar.watch(transcriptPath, {
128
+ persistent: true,
129
+ usePolling: true,
130
+ interval: 300, // Poll every 300ms for faster updates
131
+ binaryInterval: 300,
132
+ });
133
+ watcher.on('change', async () => {
134
+ try {
135
+ // Prevent concurrent processing for the same session
136
+ if (this.processingLock.get(sessionKey)) {
137
+ console.log(`[Transcript] Skipping change event - already processing: ${sessionKey}`);
138
+ return;
139
+ }
140
+ const newStats = fs.statSync(transcriptPath);
141
+ console.log(`[Transcript] File changed: ${sessionKey}, size: ${newStats.size}`);
142
+ const oldSize = this.fileSizes.get(sessionKey) || 0;
143
+ // Only process if file grew
144
+ if (newStats.size > oldSize) {
145
+ // Acquire lock
146
+ this.processingLock.set(sessionKey, true);
147
+ this.fileSizes.set(sessionKey, newStats.size);
148
+ try {
149
+ // Read new lines from the file
150
+ const newEntries = await this.readNewLines(transcriptPath, sessionKey);
151
+ for (const entry of newEntries) {
152
+ this.emit('update', {
153
+ sessionKey,
154
+ entry,
155
+ });
156
+ }
157
+ }
158
+ finally {
159
+ // Release lock
160
+ this.processingLock.set(sessionKey, false);
161
+ }
162
+ }
163
+ }
164
+ catch (error) {
165
+ // File might be temporarily unavailable
166
+ this.processingLock.set(sessionKey, false);
167
+ }
168
+ });
169
+ this.watchers.set(sessionKey, watcher);
170
+ }
171
+ /**
172
+ * Unsubscribe from transcript updates
173
+ */
174
+ unsubscribeFromUpdates(sessionKey) {
175
+ const watcher = this.watchers.get(sessionKey);
176
+ if (watcher) {
177
+ watcher.close();
178
+ this.watchers.delete(sessionKey);
179
+ this.fileSizes.delete(sessionKey);
180
+ this.processingLock.delete(sessionKey);
181
+ }
182
+ }
183
+ /**
184
+ * Read new lines that were added to the file since last read
185
+ */
186
+ async readNewLines(transcriptPath, sessionKey) {
187
+ return new Promise((resolve) => {
188
+ const lastLineNumber = this.lastLineNumbers.get(transcriptPath) || 0;
189
+ const entries = [];
190
+ let lineNumber = 0;
191
+ let newLinesFound = 0;
192
+ console.log(`[Transcript] readNewLines: lastLineNumber=${lastLineNumber}, path=${transcriptPath}`);
193
+ const fileStream = fs.createReadStream(transcriptPath, { encoding: 'utf8' });
194
+ const rl = readline.createInterface({
195
+ input: fileStream,
196
+ crlfDelay: Infinity,
197
+ });
198
+ rl.on('line', (line) => {
199
+ lineNumber++;
200
+ // Only process lines after the last known line
201
+ if (lineNumber > lastLineNumber) {
202
+ newLinesFound++;
203
+ const entry = this.parseEntry(line, lineNumber);
204
+ if (entry) {
205
+ console.log(`[Transcript] New entry found: type=${entry.type}, line=${lineNumber}`);
206
+ entries.push(entry);
207
+ }
208
+ else {
209
+ // Log first 100 chars of skipped line to understand what's being skipped
210
+ console.log(`[Transcript] Line ${lineNumber} skipped (no entry), preview: ${line.substring(0, 100)}`);
211
+ }
212
+ }
213
+ });
214
+ rl.on('close', () => {
215
+ console.log(`[Transcript] readNewLines complete: totalLines=${lineNumber}, newLines=${newLinesFound}, entries=${entries.length}`);
216
+ this.lastLineNumbers.set(transcriptPath, lineNumber);
217
+ resolve(entries);
218
+ });
219
+ rl.on('error', () => {
220
+ resolve([]);
221
+ });
222
+ });
223
+ }
224
+ /**
225
+ * Parse a JSONL line into a TranscriptEntry
226
+ */
227
+ parseEntry(line, lineNumber) {
228
+ if (!line.trim()) {
229
+ return null;
230
+ }
231
+ try {
232
+ const jsonLine = JSON.parse(line);
233
+ return this.transformMessage(jsonLine, lineNumber);
234
+ }
235
+ catch {
236
+ return null;
237
+ }
238
+ }
239
+ /**
240
+ * Transform Claude JSONL message format to our TranscriptEntry format
241
+ * Shows all content visible in the Claude terminal
242
+ */
243
+ transformMessage(jsonLine, lineNumber) {
244
+ // Only skip internal metadata types
245
+ const skipTypes = ['file-history-snapshot', 'init'];
246
+ if (skipTypes.includes(jsonLine.type)) {
247
+ return null;
248
+ }
249
+ // Skip compact summaries (internal resumption data)
250
+ if (jsonLine.isCompactSummary) {
251
+ return null;
252
+ }
253
+ // Handle system messages
254
+ if (jsonLine.type === 'system') {
255
+ const text = jsonLine.content || jsonLine.message?.content || '';
256
+ if (!text)
257
+ return null;
258
+ return {
259
+ id: jsonLine.uuid || `line-${lineNumber}`,
260
+ parentId: jsonLine.parentUuid,
261
+ type: 'system',
262
+ timestamp: jsonLine.timestamp || new Date().toISOString(),
263
+ lineNumber,
264
+ content: {
265
+ text: typeof text === 'string' ? text : JSON.stringify(text),
266
+ },
267
+ };
268
+ }
269
+ // Handle user messages
270
+ if (jsonLine.type === 'user') {
271
+ const messageContent = jsonLine.message?.content;
272
+ let text = '';
273
+ // Handle tool results (show them as tool_result type)
274
+ if (jsonLine.toolUseResult) {
275
+ const result = jsonLine.toolUseResult;
276
+ let resultText = '';
277
+ let filePath;
278
+ let diff;
279
+ // Extract file path
280
+ if (result.filePath) {
281
+ filePath = result.filePath;
282
+ }
283
+ // Extract diff if present (for Edit tool results)
284
+ if (result.structuredPatch && Array.isArray(result.structuredPatch)) {
285
+ diff = result.structuredPatch.map((hunk) => ({
286
+ oldStart: hunk.oldStart,
287
+ oldLines: hunk.oldLines,
288
+ newStart: hunk.newStart,
289
+ newLines: hunk.newLines,
290
+ lines: hunk.lines || [],
291
+ }));
292
+ // For diff results, show file path as main text
293
+ resultText = filePath ? `Updated: ${filePath.split(/[/\\]/).pop()}` : 'File updated';
294
+ }
295
+ else {
296
+ // Non-diff results
297
+ if (result.stdout)
298
+ resultText += result.stdout;
299
+ if (result.stderr)
300
+ resultText += (resultText ? '\n' : '') + result.stderr;
301
+ if (filePath && !resultText)
302
+ resultText = `File: ${filePath}`;
303
+ if (result.content)
304
+ resultText = typeof result.content === 'string' ? result.content : JSON.stringify(result.content);
305
+ if (!resultText && result.type === 'text') {
306
+ resultText = result.text || '';
307
+ }
308
+ }
309
+ return {
310
+ id: jsonLine.uuid || `line-${lineNumber}`,
311
+ parentId: jsonLine.parentUuid,
312
+ type: 'tool_result',
313
+ timestamp: jsonLine.timestamp || new Date().toISOString(),
314
+ lineNumber,
315
+ content: {
316
+ text: resultText.substring(0, 2000) + (resultText.length > 2000 ? '...' : ''),
317
+ isError: result.is_error || result.isError || false,
318
+ filePath,
319
+ diff,
320
+ },
321
+ };
322
+ }
323
+ if (typeof messageContent === 'string') {
324
+ text = messageContent;
325
+ }
326
+ else if (Array.isArray(messageContent)) {
327
+ // Extract text from content blocks
328
+ for (const block of messageContent) {
329
+ if (block.type === 'text') {
330
+ text += (text ? '\n' : '') + block.text;
331
+ }
332
+ else if (block.type === 'tool_result') {
333
+ // Tool result in array format
334
+ const resultText = typeof block.content === 'string' ? block.content : '';
335
+ if (resultText) {
336
+ return {
337
+ id: jsonLine.uuid || `line-${lineNumber}`,
338
+ parentId: jsonLine.parentUuid,
339
+ type: 'tool_result',
340
+ timestamp: jsonLine.timestamp || new Date().toISOString(),
341
+ lineNumber,
342
+ content: {
343
+ text: resultText.substring(0, 1000) + (resultText.length > 1000 ? '...' : ''),
344
+ isError: block.is_error || false,
345
+ },
346
+ };
347
+ }
348
+ }
349
+ }
350
+ }
351
+ // Skip if no actual text content for user message
352
+ if (!text.trim()) {
353
+ return null;
354
+ }
355
+ return {
356
+ id: jsonLine.uuid || `line-${lineNumber}`,
357
+ parentId: jsonLine.parentUuid,
358
+ type: 'user',
359
+ timestamp: jsonLine.timestamp || new Date().toISOString(),
360
+ lineNumber,
361
+ content: {
362
+ role: 'user',
363
+ text,
364
+ },
365
+ };
366
+ }
367
+ // Handle assistant messages
368
+ if (jsonLine.type === 'assistant') {
369
+ const messageContent = jsonLine.message?.content;
370
+ let text = '';
371
+ let toolName;
372
+ let toolInput;
373
+ if (Array.isArray(messageContent)) {
374
+ for (const block of messageContent) {
375
+ if (block.type === 'text') {
376
+ text += (text ? '\n' : '') + block.text;
377
+ }
378
+ else if (block.type === 'tool_use') {
379
+ toolName = block.name;
380
+ toolInput = block.input;
381
+ }
382
+ }
383
+ }
384
+ // If there's a tool use, return as tool_use type
385
+ if (toolName) {
386
+ return {
387
+ id: jsonLine.uuid || `line-${lineNumber}`,
388
+ parentId: jsonLine.parentUuid,
389
+ type: 'tool_use',
390
+ timestamp: jsonLine.timestamp || new Date().toISOString(),
391
+ lineNumber,
392
+ content: {
393
+ role: 'assistant',
394
+ text: text || undefined,
395
+ toolName,
396
+ toolInput,
397
+ },
398
+ };
399
+ }
400
+ // Regular assistant text response
401
+ if (text) {
402
+ return {
403
+ id: jsonLine.uuid || `line-${lineNumber}`,
404
+ parentId: jsonLine.parentUuid,
405
+ type: 'assistant',
406
+ timestamp: jsonLine.timestamp || new Date().toISOString(),
407
+ lineNumber,
408
+ content: {
409
+ role: 'assistant',
410
+ text,
411
+ },
412
+ };
413
+ }
414
+ return null;
415
+ }
416
+ // Handle tool results
417
+ if (jsonLine.type === 'tool_result') {
418
+ let text = '';
419
+ let isError = false;
420
+ if (jsonLine.content) {
421
+ if (typeof jsonLine.content === 'string') {
422
+ text = jsonLine.content;
423
+ }
424
+ else if (Array.isArray(jsonLine.content)) {
425
+ text = jsonLine.content
426
+ .filter((block) => block.type === 'text')
427
+ .map((block) => block.text)
428
+ .join('\n');
429
+ }
430
+ }
431
+ isError = jsonLine.is_error === true;
432
+ return {
433
+ id: jsonLine.uuid || `line-${lineNumber}`,
434
+ parentId: jsonLine.parentUuid,
435
+ type: 'tool_result',
436
+ timestamp: jsonLine.timestamp || new Date().toISOString(),
437
+ lineNumber,
438
+ content: {
439
+ text: text.substring(0, 500) + (text.length > 500 ? '...' : ''), // Truncate long results
440
+ isError,
441
+ },
442
+ };
443
+ }
444
+ return null;
445
+ }
446
+ /**
447
+ * Clean up all watchers
448
+ */
449
+ cleanup() {
450
+ for (const [sessionKey] of this.watchers) {
451
+ this.unsubscribeFromUpdates(sessionKey);
452
+ }
453
+ this.fileSizes.clear();
454
+ this.lastLineNumbers.clear();
455
+ this.processingLock.clear();
456
+ }
457
+ }
458
+ exports.transcriptStreamer = new TranscriptStreamer();
459
+ //# sourceMappingURL=transcript-streamer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-streamer.js","sourceRoot":"","sources":["../src/transcript-streamer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ import { EventEmitter } from 'events';
2
+ type DeviceStatus = 'online' | 'offline' | 'busy' | 'syncing';
3
+ interface ClaudeSessionUpdate {
4
+ sessionKey: string;
5
+ directory: string;
6
+ state: 'active' | 'inactive';
7
+ lastUsedAt: string;
8
+ transcriptPath?: string;
9
+ }
10
+ interface TranscriptEntry {
11
+ id: string;
12
+ parentId?: string;
13
+ type: 'user' | 'assistant' | 'system' | 'tool_use' | 'tool_result';
14
+ timestamp: string;
15
+ lineNumber: number;
16
+ content?: {
17
+ role?: 'user' | 'assistant';
18
+ text?: string;
19
+ toolName?: string;
20
+ toolInput?: any;
21
+ isError?: boolean;
22
+ };
23
+ }
24
+ interface ClaudeApprovalRequest {
25
+ approvalId: string;
26
+ terminalSessionId: string;
27
+ sessionKey?: string;
28
+ context: string[];
29
+ options: string[];
30
+ promptText: string;
31
+ }
32
+ declare class WebSocketClient extends EventEmitter {
33
+ private socket;
34
+ private reconnectAttempts;
35
+ private maxReconnectAttempts;
36
+ private heartbeatInterval;
37
+ private _sessionId;
38
+ get sessionId(): string;
39
+ connect(): Promise<void>;
40
+ disconnect(): void;
41
+ private startHeartbeat;
42
+ private stopHeartbeat;
43
+ sendHeartbeat(status?: DeviceStatus): void;
44
+ updateStatus(status: DeviceStatus): void;
45
+ setSyncing(syncing: boolean): void;
46
+ sendClaudeSessionUpdate(session: ClaudeSessionUpdate): void;
47
+ sendClaudeSessions(sessions: ClaudeSessionUpdate[]): void;
48
+ sendToolStatusUpdate(toolType: string, status: 'active' | 'inactive' | 'error'): void;
49
+ sendApprovalRequest(data: {
50
+ sessionId: string;
51
+ messageId: string;
52
+ type: 'CODE_CHANGE' | 'FILE_OPERATION' | 'COMMAND_EXECUTION' | 'OTHER';
53
+ description: string;
54
+ changes: any;
55
+ }): void;
56
+ sendTerminalOutput(data: {
57
+ terminalSessionId: string;
58
+ output: string;
59
+ type: 'stdout' | 'stderr' | 'exit';
60
+ exitCode?: number;
61
+ }): void;
62
+ sendTerminalCwd(data: {
63
+ terminalSessionId: string;
64
+ cwd: string;
65
+ }): void;
66
+ sendDirectoryListResponse(data: {
67
+ requestId: string;
68
+ entries: Array<{
69
+ name: string;
70
+ type: 'file' | 'directory';
71
+ path: string;
72
+ }>;
73
+ currentPath: string;
74
+ }): void;
75
+ sendFileChanged(data: {
76
+ projectId: string;
77
+ filePath: string;
78
+ changeType: 'created' | 'modified' | 'deleted';
79
+ }): void;
80
+ sendTranscriptHistory(data: {
81
+ sessionKey: string;
82
+ entries: TranscriptEntry[];
83
+ totalEntries: number;
84
+ offset: number;
85
+ hasMore: boolean;
86
+ }): void;
87
+ sendTranscriptUpdate(data: {
88
+ sessionKey: string;
89
+ entry: TranscriptEntry;
90
+ }): void;
91
+ sendRpcResponse(data: {
92
+ requestId: string;
93
+ result?: any;
94
+ error?: {
95
+ code: number;
96
+ message: string;
97
+ };
98
+ }): void;
99
+ sendClaudeApprovalRequest(data: ClaudeApprovalRequest): void;
100
+ sendThinkingContent(data: {
101
+ sessionKey?: string;
102
+ thinkingId: string;
103
+ content: string;
104
+ partial: boolean;
105
+ }): void;
106
+ sendTokenUsage(data: {
107
+ sessionKey?: string;
108
+ usage: {
109
+ inputTokens: number;
110
+ outputTokens: number;
111
+ };
112
+ }): void;
113
+ sendTaskProgress(data: {
114
+ sessionKey?: string;
115
+ type: 'created' | 'updated' | 'completed' | 'list';
116
+ task?: {
117
+ id: string;
118
+ subject: string;
119
+ status: 'pending' | 'in_progress' | 'completed';
120
+ activeForm?: string;
121
+ };
122
+ tasks?: Array<{
123
+ id: string;
124
+ subject: string;
125
+ status: 'pending' | 'in_progress' | 'completed';
126
+ activeForm?: string;
127
+ }>;
128
+ }): void;
129
+ get isConnected(): boolean;
130
+ }
131
+ export declare const wsClient: WebSocketClient;
132
+ export default wsClient;
133
+ //# sourceMappingURL=websocket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../src/websocket.ts"],"names":[],"mappings":"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"}