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,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
+ }