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.
- package/LICENSE +17 -0
- package/README.md +173 -0
- package/dist/api.d.ts +44 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +76 -0
- package/dist/api.js.map +1 -0
- package/dist/approval.d.ts +46 -0
- package/dist/approval.d.ts.map +1 -0
- package/dist/approval.js +119 -0
- package/dist/approval.js.map +1 -0
- package/dist/config.d.ts +36 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +209 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +868 -0
- package/dist/index.js.map +1 -0
- package/dist/integration.d.ts +30 -0
- package/dist/integration.d.ts.map +1 -0
- package/dist/integration.js +84 -0
- package/dist/integration.js.map +1 -0
- package/dist/terminal.d.ts +25 -0
- package/dist/terminal.d.ts.map +1 -0
- package/dist/terminal.js +171 -0
- package/dist/terminal.js.map +1 -0
- package/dist/tools/claude-hooks.d.ts +97 -0
- package/dist/tools/claude-hooks.d.ts.map +1 -0
- package/dist/tools/claude-hooks.js +348 -0
- package/dist/tools/claude-hooks.js.map +1 -0
- package/dist/tools/claude-process.d.ts +271 -0
- package/dist/tools/claude-process.d.ts.map +1 -0
- package/dist/tools/claude-process.js +931 -0
- package/dist/tools/claude-process.js.map +1 -0
- package/dist/tools/claude-sessions.d.ts +60 -0
- package/dist/tools/claude-sessions.d.ts.map +1 -0
- package/dist/tools/claude-sessions.js +285 -0
- package/dist/tools/claude-sessions.js.map +1 -0
- package/dist/tools/detector.d.ts +64 -0
- package/dist/tools/detector.d.ts.map +1 -0
- package/dist/tools/detector.js +383 -0
- package/dist/tools/detector.js.map +1 -0
- package/dist/tools/index.d.ts +8 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +15 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/transcript-streamer.d.ts +68 -0
- package/dist/transcript-streamer.d.ts.map +1 -0
- package/dist/transcript-streamer.js +459 -0
- package/dist/transcript-streamer.js.map +1 -0
- package/dist/websocket.d.ts +133 -0
- package/dist/websocket.d.ts.map +1 -0
- package/dist/websocket.js +247 -0
- package/dist/websocket.js.map +1 -0
- package/nul +0 -0
- package/package.json +54 -0
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.wsClient = void 0;
|
|
4
|
+
const socket_io_client_1 = require("socket.io-client");
|
|
5
|
+
const config_1 = require("./config");
|
|
6
|
+
const events_1 = require("events");
|
|
7
|
+
const uuid_1 = require("uuid");
|
|
8
|
+
class WebSocketClient extends events_1.EventEmitter {
|
|
9
|
+
constructor() {
|
|
10
|
+
super(...arguments);
|
|
11
|
+
this.socket = null;
|
|
12
|
+
this.reconnectAttempts = 0;
|
|
13
|
+
this.maxReconnectAttempts = 10;
|
|
14
|
+
this.heartbeatInterval = null;
|
|
15
|
+
this._sessionId = '';
|
|
16
|
+
}
|
|
17
|
+
// Unique session ID for this CLI connection
|
|
18
|
+
get sessionId() {
|
|
19
|
+
if (!this._sessionId) {
|
|
20
|
+
this._sessionId = (0, uuid_1.v4)();
|
|
21
|
+
}
|
|
22
|
+
return this._sessionId;
|
|
23
|
+
}
|
|
24
|
+
connect() {
|
|
25
|
+
return new Promise((resolve, reject) => {
|
|
26
|
+
if (this.socket?.connected) {
|
|
27
|
+
resolve();
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const deviceId = config_1.config.deviceId;
|
|
31
|
+
if (!deviceId) {
|
|
32
|
+
reject(new Error('Device not registered'));
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
// Generate unique session ID for this CLI connection
|
|
36
|
+
const sessionId = this.sessionId;
|
|
37
|
+
const userId = config_1.config.userId; // Pass userId from config for user-based routing
|
|
38
|
+
this.socket = (0, socket_io_client_1.io)(config_1.config.wsUrl, {
|
|
39
|
+
auth: {
|
|
40
|
+
deviceId,
|
|
41
|
+
userId, // Include userId so API can track by user even if device not in DB
|
|
42
|
+
clientType: 'session-scoped',
|
|
43
|
+
sessionId,
|
|
44
|
+
},
|
|
45
|
+
transports: ['websocket'],
|
|
46
|
+
reconnection: true,
|
|
47
|
+
reconnectionAttempts: this.maxReconnectAttempts,
|
|
48
|
+
reconnectionDelay: 1000,
|
|
49
|
+
reconnectionDelayMax: 5000,
|
|
50
|
+
});
|
|
51
|
+
this.socket.on('connect', () => {
|
|
52
|
+
this.reconnectAttempts = 0;
|
|
53
|
+
console.log(`[WS] Connected with deviceId: ${deviceId}, sessionId: ${sessionId}`);
|
|
54
|
+
this.emit('connected');
|
|
55
|
+
this.startHeartbeat();
|
|
56
|
+
resolve();
|
|
57
|
+
});
|
|
58
|
+
this.socket.on('disconnect', (reason) => {
|
|
59
|
+
this.emit('disconnected', reason);
|
|
60
|
+
this.stopHeartbeat();
|
|
61
|
+
});
|
|
62
|
+
this.socket.on('connect_error', (error) => {
|
|
63
|
+
this.reconnectAttempts++;
|
|
64
|
+
this.emit('error', error);
|
|
65
|
+
if (this.reconnectAttempts >= this.maxReconnectAttempts) {
|
|
66
|
+
reject(new Error('Failed to connect after maximum attempts'));
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
// Listen for terminal create requests from mobile app
|
|
70
|
+
this.socket.on('terminal_create', (data) => {
|
|
71
|
+
console.log(`[WS] Received terminal_create:`, JSON.stringify(data));
|
|
72
|
+
this.emit('terminal_create', data);
|
|
73
|
+
});
|
|
74
|
+
// Listen for terminal commands from mobile app
|
|
75
|
+
this.socket.on('terminal_command', (data) => {
|
|
76
|
+
console.log(`[WS] Received terminal_command:`, JSON.stringify(data));
|
|
77
|
+
this.emit('terminal_command', data);
|
|
78
|
+
});
|
|
79
|
+
// Listen for approval responses
|
|
80
|
+
this.socket.on('approval_response', (data) => {
|
|
81
|
+
this.emit('approval_response', data);
|
|
82
|
+
});
|
|
83
|
+
// Listen for git clone requests
|
|
84
|
+
this.socket.on('git_clone', (data) => {
|
|
85
|
+
this.emit('git_clone', data);
|
|
86
|
+
});
|
|
87
|
+
// Listen for user messages from mobile app
|
|
88
|
+
this.socket.on('user_message', (data) => {
|
|
89
|
+
console.log(`[WS] Received user_message: ${data.message.substring(0, 50)}...`);
|
|
90
|
+
this.emit('user_message', data);
|
|
91
|
+
});
|
|
92
|
+
// Listen for Claude session requests from mobile app
|
|
93
|
+
this.socket.on('claude_resume_session', (data) => {
|
|
94
|
+
console.log(`[WS] Received claude_resume_session:`, JSON.stringify(data));
|
|
95
|
+
this.emit('claude_resume_session', data);
|
|
96
|
+
});
|
|
97
|
+
this.socket.on('claude_start_session', (data) => {
|
|
98
|
+
console.log(`[WS] Received claude_start_session:`, JSON.stringify(data));
|
|
99
|
+
this.emit('claude_start_session', data);
|
|
100
|
+
});
|
|
101
|
+
this.socket.on('directory_list', (data) => {
|
|
102
|
+
console.log(`[WS] Received directory_list:`, JSON.stringify(data));
|
|
103
|
+
this.emit('directory_list', data);
|
|
104
|
+
});
|
|
105
|
+
// Listen for transcript fetch requests from mobile app
|
|
106
|
+
this.socket.on('transcript_fetch', (data) => {
|
|
107
|
+
console.log(`[WS] Received transcript_fetch:`, JSON.stringify(data));
|
|
108
|
+
this.emit('transcript_fetch', data);
|
|
109
|
+
});
|
|
110
|
+
// Listen for transcript subscribe requests
|
|
111
|
+
this.socket.on('transcript_subscribe', (data) => {
|
|
112
|
+
console.log(`[WS] Received transcript_subscribe:`, JSON.stringify(data));
|
|
113
|
+
this.emit('transcript_subscribe', data);
|
|
114
|
+
});
|
|
115
|
+
// Listen for transcript unsubscribe requests
|
|
116
|
+
this.socket.on('transcript_unsubscribe', (data) => {
|
|
117
|
+
console.log(`[WS] Received transcript_unsubscribe:`, JSON.stringify(data));
|
|
118
|
+
this.emit('transcript_unsubscribe', data);
|
|
119
|
+
});
|
|
120
|
+
// Listen for SDK subscribe start requests from API
|
|
121
|
+
// This is sent when mobile uses transcript_subscribe_sdk
|
|
122
|
+
this.socket.on('transcript_subscribe_sdk_start', (data) => {
|
|
123
|
+
console.log(`[WS] Received transcript_subscribe_sdk_start:`, JSON.stringify(data));
|
|
124
|
+
this.emit('transcript_subscribe_sdk_start', data);
|
|
125
|
+
});
|
|
126
|
+
// Listen for claude sessions request (mobile wants current state)
|
|
127
|
+
this.socket.on('claude_sessions_request', (data) => {
|
|
128
|
+
console.log(`[WS] Received claude_sessions_request`);
|
|
129
|
+
this.emit('claude_sessions_request', data);
|
|
130
|
+
});
|
|
131
|
+
// Listen for RPC requests from the API gateway
|
|
132
|
+
this.socket.on('rpc_request', (data) => {
|
|
133
|
+
console.log(`[WS] Received rpc_request: ${data.method}, requestId: ${data.requestId}`);
|
|
134
|
+
this.emit('rpc_request', data);
|
|
135
|
+
});
|
|
136
|
+
// Listen for Claude approval responses from mobile
|
|
137
|
+
this.socket.on('claude_approval_response', (data) => {
|
|
138
|
+
console.log(`[WS] Received claude_approval_response: ${data.approvalId}, response: ${data.response}`);
|
|
139
|
+
this.emit('claude_approval_response', data);
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
disconnect() {
|
|
144
|
+
this.stopHeartbeat();
|
|
145
|
+
if (this.socket) {
|
|
146
|
+
this.socket.disconnect();
|
|
147
|
+
this.socket = null;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
startHeartbeat() {
|
|
151
|
+
this.heartbeatInterval = setInterval(() => {
|
|
152
|
+
this.sendHeartbeat();
|
|
153
|
+
}, 30000); // Every 30 seconds
|
|
154
|
+
}
|
|
155
|
+
stopHeartbeat() {
|
|
156
|
+
if (this.heartbeatInterval) {
|
|
157
|
+
clearInterval(this.heartbeatInterval);
|
|
158
|
+
this.heartbeatInterval = null;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
// Send heartbeat to keep connection alive
|
|
162
|
+
sendHeartbeat(status = 'online') {
|
|
163
|
+
this.socket?.emit('device_heartbeat', { status });
|
|
164
|
+
}
|
|
165
|
+
// Update device status
|
|
166
|
+
updateStatus(status) {
|
|
167
|
+
this.socket?.emit('device_heartbeat', { status });
|
|
168
|
+
}
|
|
169
|
+
// Send syncing status
|
|
170
|
+
setSyncing(syncing) {
|
|
171
|
+
this.socket?.emit('device_syncing', { syncing });
|
|
172
|
+
}
|
|
173
|
+
// Send Claude session update
|
|
174
|
+
sendClaudeSessionUpdate(session) {
|
|
175
|
+
this.socket?.emit('claude_session_update', session);
|
|
176
|
+
}
|
|
177
|
+
// Send multiple Claude sessions as a single batch event
|
|
178
|
+
sendClaudeSessions(sessions) {
|
|
179
|
+
if (sessions.length > 0) {
|
|
180
|
+
this.socket?.emit('claude_session_batch_update', { sessions });
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// Send tool status update (e.g., Claude active/inactive)
|
|
184
|
+
sendToolStatusUpdate(toolType, status) {
|
|
185
|
+
this.socket?.emit('tool_status_update', {
|
|
186
|
+
toolType,
|
|
187
|
+
status,
|
|
188
|
+
timestamp: new Date().toISOString(),
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
// Send approval request
|
|
192
|
+
sendApprovalRequest(data) {
|
|
193
|
+
this.socket?.emit('approval_request', data);
|
|
194
|
+
}
|
|
195
|
+
// Send terminal output
|
|
196
|
+
sendTerminalOutput(data) {
|
|
197
|
+
this.socket?.emit('terminal_output', data);
|
|
198
|
+
}
|
|
199
|
+
// Send working directory change
|
|
200
|
+
sendTerminalCwd(data) {
|
|
201
|
+
this.socket?.emit('terminal_cwd', data);
|
|
202
|
+
}
|
|
203
|
+
// Send directory listing response
|
|
204
|
+
sendDirectoryListResponse(data) {
|
|
205
|
+
this.socket?.emit('directory_list_response', data);
|
|
206
|
+
}
|
|
207
|
+
// Send file change notification
|
|
208
|
+
sendFileChanged(data) {
|
|
209
|
+
this.socket?.emit('file_changed', data);
|
|
210
|
+
}
|
|
211
|
+
// Send transcript history to mobile app
|
|
212
|
+
sendTranscriptHistory(data) {
|
|
213
|
+
this.socket?.emit('transcript_history', data);
|
|
214
|
+
}
|
|
215
|
+
// Send transcript update (new entry) to mobile app
|
|
216
|
+
sendTranscriptUpdate(data) {
|
|
217
|
+
this.socket?.emit('transcript_update', data);
|
|
218
|
+
}
|
|
219
|
+
// Send RPC response back to API gateway
|
|
220
|
+
sendRpcResponse(data) {
|
|
221
|
+
console.log(`[WS] Sending rpc_response: ${data.requestId}, hasResult: ${!!data.result}, hasError: ${!!data.error}`);
|
|
222
|
+
this.socket?.emit('rpc_response', data);
|
|
223
|
+
}
|
|
224
|
+
// Send Claude approval request to mobile
|
|
225
|
+
sendClaudeApprovalRequest(data) {
|
|
226
|
+
console.log(`[WS] Sending claude_approval_request: ${data.approvalId}`);
|
|
227
|
+
this.socket?.emit('claude_approval_request', data);
|
|
228
|
+
}
|
|
229
|
+
// Send thinking content to mobile
|
|
230
|
+
sendThinkingContent(data) {
|
|
231
|
+
this.socket?.emit('thinking_content', data);
|
|
232
|
+
}
|
|
233
|
+
// Send token usage to mobile
|
|
234
|
+
sendTokenUsage(data) {
|
|
235
|
+
this.socket?.emit('token_usage', data);
|
|
236
|
+
}
|
|
237
|
+
// Send task progress to mobile
|
|
238
|
+
sendTaskProgress(data) {
|
|
239
|
+
this.socket?.emit('task_progress', data);
|
|
240
|
+
}
|
|
241
|
+
get isConnected() {
|
|
242
|
+
return this.socket?.connected ?? false;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
exports.wsClient = new WebSocketClient();
|
|
246
|
+
exports.default = exports.wsClient;
|
|
247
|
+
//# sourceMappingURL=websocket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../src/websocket.ts"],"names":[],"mappings":"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"}
|
package/nul
ADDED
|
File without changes
|
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "forkoff",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "CLI tool for ForkOff - Connect your AI coding tools to mobile",
|
|
5
|
+
"main": "dist/integration.js",
|
|
6
|
+
"types": "dist/integration.d.ts",
|
|
7
|
+
"bin": {
|
|
8
|
+
"forkoff": "./dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"require": "./dist/integration.js",
|
|
13
|
+
"types": "./dist/integration.d.ts"
|
|
14
|
+
},
|
|
15
|
+
"./cli": "./dist/index.js"
|
|
16
|
+
},
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "tsc",
|
|
19
|
+
"prepublishOnly": "npm run build",
|
|
20
|
+
"start": "node dist/index.js",
|
|
21
|
+
"dev": "ts-node src/index.ts",
|
|
22
|
+
"watch": "tsc -w"
|
|
23
|
+
},
|
|
24
|
+
"keywords": [
|
|
25
|
+
"cli",
|
|
26
|
+
"ai",
|
|
27
|
+
"coding",
|
|
28
|
+
"mobile",
|
|
29
|
+
"claude",
|
|
30
|
+
"forkoff"
|
|
31
|
+
],
|
|
32
|
+
"author": "",
|
|
33
|
+
"license": "SEE LICENSE IN LICENSE",
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"axios": "^1.13.2",
|
|
36
|
+
"chalk": "^4.1.2",
|
|
37
|
+
"chokidar": "^3.6.0",
|
|
38
|
+
"commander": "^14.0.2",
|
|
39
|
+
"cross-spawn": "^7.0.6",
|
|
40
|
+
"inquirer": "^12.11.1",
|
|
41
|
+
"node-machine-id": "^1.1.12",
|
|
42
|
+
"ora": "^5.4.1",
|
|
43
|
+
"qrcode-terminal": "^0.12.0",
|
|
44
|
+
"socket.io-client": "^4.8.3",
|
|
45
|
+
"uuid": "^8.3.2"
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"@types/cross-spawn": "^6.0.6",
|
|
49
|
+
"@types/inquirer": "^9.0.9",
|
|
50
|
+
"@types/node": "^25.0.9",
|
|
51
|
+
"ts-node": "^10.9.2",
|
|
52
|
+
"typescript": "^5.9.3"
|
|
53
|
+
}
|
|
54
|
+
}
|