@10play/expo-air 0.1.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 (98) hide show
  1. package/README.md +156 -0
  2. package/android/build.gradle +43 -0
  3. package/android/src/main/AndroidManifest.xml +2 -0
  4. package/android/src/main/java/expo/modules/expoair/ExpoAirModule.kt +50 -0
  5. package/android/src/main/java/expo/modules/expoair/ExpoAirView.kt +30 -0
  6. package/build/ExpoAir.types.d.ts +25 -0
  7. package/build/ExpoAir.types.d.ts.map +1 -0
  8. package/build/ExpoAir.types.js +2 -0
  9. package/build/ExpoAir.types.js.map +1 -0
  10. package/build/ExpoAirModule.d.ts +17 -0
  11. package/build/ExpoAirModule.d.ts.map +1 -0
  12. package/build/ExpoAirModule.js +4 -0
  13. package/build/ExpoAirModule.js.map +1 -0
  14. package/build/ExpoAirModule.web.d.ts +10 -0
  15. package/build/ExpoAirModule.web.d.ts.map +1 -0
  16. package/build/ExpoAirModule.web.js +12 -0
  17. package/build/ExpoAirModule.web.js.map +1 -0
  18. package/build/ExpoAirView.d.ts +4 -0
  19. package/build/ExpoAirView.d.ts.map +1 -0
  20. package/build/ExpoAirView.js +7 -0
  21. package/build/ExpoAirView.js.map +1 -0
  22. package/build/ExpoAirView.web.d.ts +4 -0
  23. package/build/ExpoAirView.web.d.ts.map +1 -0
  24. package/build/ExpoAirView.web.js +7 -0
  25. package/build/ExpoAirView.web.js.map +1 -0
  26. package/build/index.d.ts +4 -0
  27. package/build/index.d.ts.map +1 -0
  28. package/build/index.js +6 -0
  29. package/build/index.js.map +1 -0
  30. package/cli/dist/bin/expo-air.d.ts +3 -0
  31. package/cli/dist/bin/expo-air.d.ts.map +1 -0
  32. package/cli/dist/bin/expo-air.js +51 -0
  33. package/cli/dist/bin/expo-air.js.map +1 -0
  34. package/cli/dist/commands/fly.d.ts +11 -0
  35. package/cli/dist/commands/fly.d.ts.map +1 -0
  36. package/cli/dist/commands/fly.js +324 -0
  37. package/cli/dist/commands/fly.js.map +1 -0
  38. package/cli/dist/commands/init.d.ts +7 -0
  39. package/cli/dist/commands/init.d.ts.map +1 -0
  40. package/cli/dist/commands/init.js +126 -0
  41. package/cli/dist/commands/init.js.map +1 -0
  42. package/cli/dist/commands/server.d.ts +7 -0
  43. package/cli/dist/commands/server.d.ts.map +1 -0
  44. package/cli/dist/commands/server.js +40 -0
  45. package/cli/dist/commands/server.js.map +1 -0
  46. package/cli/dist/commands/start.d.ts +12 -0
  47. package/cli/dist/commands/start.d.ts.map +1 -0
  48. package/cli/dist/commands/start.js +266 -0
  49. package/cli/dist/commands/start.js.map +1 -0
  50. package/cli/dist/server/promptServer.d.ts +38 -0
  51. package/cli/dist/server/promptServer.d.ts.map +1 -0
  52. package/cli/dist/server/promptServer.js +591 -0
  53. package/cli/dist/server/promptServer.js.map +1 -0
  54. package/cli/dist/tsconfig.tsbuildinfo +1 -0
  55. package/cli/dist/tunnel/bore.d.ts +24 -0
  56. package/cli/dist/tunnel/bore.d.ts.map +1 -0
  57. package/cli/dist/tunnel/bore.js +157 -0
  58. package/cli/dist/tunnel/bore.js.map +1 -0
  59. package/cli/dist/tunnel/cloudflare.d.ts +17 -0
  60. package/cli/dist/tunnel/cloudflare.d.ts.map +1 -0
  61. package/cli/dist/tunnel/cloudflare.js +159 -0
  62. package/cli/dist/tunnel/cloudflare.js.map +1 -0
  63. package/cli/dist/tunnel/localhost-run.d.ts +13 -0
  64. package/cli/dist/tunnel/localhost-run.d.ts.map +1 -0
  65. package/cli/dist/tunnel/localhost-run.js +65 -0
  66. package/cli/dist/tunnel/localhost-run.js.map +1 -0
  67. package/cli/dist/tunnel/localtunnel.d.ts +12 -0
  68. package/cli/dist/tunnel/localtunnel.d.ts.map +1 -0
  69. package/cli/dist/tunnel/localtunnel.js +23 -0
  70. package/cli/dist/tunnel/localtunnel.js.map +1 -0
  71. package/cli/dist/types/messages.d.ts +90 -0
  72. package/cli/dist/types/messages.d.ts.map +1 -0
  73. package/cli/dist/types/messages.js +8 -0
  74. package/cli/dist/types/messages.js.map +1 -0
  75. package/expo-module.config.json +10 -0
  76. package/ios/ExpoAir.podspec +34 -0
  77. package/ios/ExpoAirAppDelegateSubscriber.swift +85 -0
  78. package/ios/ExpoAirModule.swift +88 -0
  79. package/ios/ExpoAirView.swift +38 -0
  80. package/ios/FloatingBubbleManager.swift +483 -0
  81. package/ios/WidgetBridge.h +4 -0
  82. package/ios/WidgetBridge.mm +64 -0
  83. package/ios/WidgetRuntime.h +11 -0
  84. package/ios/WidgetRuntime.mm +153 -0
  85. package/package.json +90 -0
  86. package/plugin/build/index.d.ts +3 -0
  87. package/plugin/build/index.js +152 -0
  88. package/widget/BubbleContent.tsx +474 -0
  89. package/widget/app.json +8 -0
  90. package/widget/babel.config.js +6 -0
  91. package/widget/components/GitChangesTab.tsx +148 -0
  92. package/widget/components/PromptInput.tsx +150 -0
  93. package/widget/components/ResponseArea.tsx +253 -0
  94. package/widget/index.ts +5 -0
  95. package/widget/metro.config.js +28 -0
  96. package/widget/package.json +16 -0
  97. package/widget/services/websocket.ts +316 -0
  98. package/widget/tsconfig.json +4 -0
@@ -0,0 +1,591 @@
1
+ import { WebSocketServer, WebSocket } from "ws";
2
+ import { query } from "@anthropic-ai/claude-agent-sdk";
3
+ import { randomUUID } from "crypto";
4
+ import { execSync } from "child_process";
5
+ import { readFileSync, writeFileSync, existsSync } from "fs";
6
+ import { join } from "path";
7
+ import chalk from "chalk";
8
+ export class PromptServer {
9
+ wss = null;
10
+ port;
11
+ clients = new Set();
12
+ currentQuery = null;
13
+ abortController = null;
14
+ projectRoot;
15
+ sessionId = null;
16
+ conversationHistory = [];
17
+ gitWatchInterval = null;
18
+ lastBranchName = "";
19
+ lastGitChangesHash = "";
20
+ constructor(port, projectRoot) {
21
+ this.port = port;
22
+ this.projectRoot = projectRoot || process.cwd();
23
+ this.loadSession();
24
+ }
25
+ getBranchName() {
26
+ try {
27
+ return execSync("git rev-parse --abbrev-ref HEAD", {
28
+ cwd: this.projectRoot,
29
+ encoding: "utf-8",
30
+ stdio: ["pipe", "pipe", "pipe"],
31
+ }).trim();
32
+ }
33
+ catch {
34
+ return "main";
35
+ }
36
+ }
37
+ getGitChanges() {
38
+ try {
39
+ const output = execSync("git status --porcelain", {
40
+ cwd: this.projectRoot,
41
+ encoding: "utf-8",
42
+ stdio: ["pipe", "pipe", "pipe"],
43
+ });
44
+ if (!output.trim()) {
45
+ return [];
46
+ }
47
+ return output
48
+ .trim()
49
+ .split("\n")
50
+ .map((line) => {
51
+ const statusCode = line.substring(0, 2);
52
+ const file = line.substring(3);
53
+ let status = "modified";
54
+ if (statusCode.includes("A") || statusCode === "??") {
55
+ status = statusCode === "??" ? "untracked" : "added";
56
+ }
57
+ else if (statusCode.includes("D")) {
58
+ status = "deleted";
59
+ }
60
+ else if (statusCode.includes("R")) {
61
+ status = "renamed";
62
+ }
63
+ return { file, status };
64
+ });
65
+ }
66
+ catch {
67
+ return [];
68
+ }
69
+ }
70
+ startGitWatcher() {
71
+ // Initial state
72
+ this.lastBranchName = this.getBranchName();
73
+ this.lastGitChangesHash = JSON.stringify(this.getGitChanges());
74
+ // Poll every 2 seconds for changes
75
+ this.gitWatchInterval = setInterval(() => {
76
+ const currentBranch = this.getBranchName();
77
+ const currentChanges = this.getGitChanges();
78
+ const currentChangesHash = JSON.stringify(currentChanges);
79
+ // Check if anything changed
80
+ if (currentBranch !== this.lastBranchName || currentChangesHash !== this.lastGitChangesHash) {
81
+ this.lastBranchName = currentBranch;
82
+ this.lastGitChangesHash = currentChangesHash;
83
+ // Broadcast to all clients
84
+ this.broadcastGitStatus(currentBranch, currentChanges);
85
+ }
86
+ }, 2000);
87
+ }
88
+ stopGitWatcher() {
89
+ if (this.gitWatchInterval) {
90
+ clearInterval(this.gitWatchInterval);
91
+ this.gitWatchInterval = null;
92
+ }
93
+ }
94
+ broadcastGitStatus(branchName, changes) {
95
+ const message = {
96
+ type: "git_status",
97
+ branchName,
98
+ changes,
99
+ timestamp: Date.now(),
100
+ };
101
+ for (const client of this.clients) {
102
+ this.sendToClient(client, message);
103
+ }
104
+ this.log(`Git status updated: ${branchName} (${changes.length} changes)`, "info");
105
+ }
106
+ getConfigPath() {
107
+ return join(this.projectRoot, ".expo-air.local.json");
108
+ }
109
+ loadSession() {
110
+ try {
111
+ const configPath = this.getConfigPath();
112
+ if (existsSync(configPath)) {
113
+ const config = JSON.parse(readFileSync(configPath, "utf-8"));
114
+ if (config.sessionId) {
115
+ this.sessionId = config.sessionId;
116
+ this.log(`Loaded session: ${this.sessionId}`, "info");
117
+ }
118
+ if (config.conversationHistory && Array.isArray(config.conversationHistory)) {
119
+ this.conversationHistory = config.conversationHistory;
120
+ this.log(`Loaded ${this.conversationHistory.length} history entries`, "info");
121
+ }
122
+ }
123
+ }
124
+ catch (error) {
125
+ this.log("Failed to load session from config", "error");
126
+ }
127
+ }
128
+ saveSession() {
129
+ try {
130
+ const configPath = this.getConfigPath();
131
+ let config = {};
132
+ if (existsSync(configPath)) {
133
+ config = JSON.parse(readFileSync(configPath, "utf-8"));
134
+ }
135
+ config.sessionId = this.sessionId;
136
+ config.conversationHistory = this.conversationHistory;
137
+ writeFileSync(configPath, JSON.stringify(config, null, 2));
138
+ this.log(`Saved session with ${this.conversationHistory.length} history entries`, "info");
139
+ }
140
+ catch (error) {
141
+ this.log("Failed to save session to config", "error");
142
+ }
143
+ }
144
+ clearSessionFromFile() {
145
+ try {
146
+ const configPath = this.getConfigPath();
147
+ if (existsSync(configPath)) {
148
+ const config = JSON.parse(readFileSync(configPath, "utf-8"));
149
+ delete config.sessionId;
150
+ delete config.conversationHistory;
151
+ writeFileSync(configPath, JSON.stringify(config, null, 2));
152
+ }
153
+ }
154
+ catch (error) {
155
+ this.log("Failed to clear session from config", "error");
156
+ }
157
+ }
158
+ async start() {
159
+ return new Promise((resolve, reject) => {
160
+ this.wss = new WebSocketServer({ port: this.port });
161
+ this.wss.on("listening", () => {
162
+ this.startGitWatcher();
163
+ resolve();
164
+ });
165
+ this.wss.on("error", (error) => {
166
+ reject(error);
167
+ });
168
+ this.wss.on("connection", (ws) => {
169
+ this.handleConnection(ws);
170
+ });
171
+ });
172
+ }
173
+ async stop() {
174
+ // Stop git watcher
175
+ this.stopGitWatcher();
176
+ // Abort any running query
177
+ if (this.abortController) {
178
+ this.abortController.abort();
179
+ this.abortController = null;
180
+ }
181
+ // Close all client connections
182
+ for (const client of this.clients) {
183
+ client.close();
184
+ }
185
+ this.clients.clear();
186
+ // Close server
187
+ return new Promise((resolve) => {
188
+ if (this.wss) {
189
+ this.wss.close(() => {
190
+ resolve();
191
+ });
192
+ }
193
+ else {
194
+ resolve();
195
+ }
196
+ });
197
+ }
198
+ handleConnection(ws) {
199
+ this.clients.add(ws);
200
+ this.log("Client connected", "info");
201
+ // Send connected status
202
+ this.sendToClient(ws, {
203
+ type: "status",
204
+ status: "connected",
205
+ timestamp: Date.now(),
206
+ });
207
+ // Send conversation history if we have any
208
+ if (this.conversationHistory.length > 0) {
209
+ this.sendToClient(ws, {
210
+ type: "history",
211
+ entries: this.conversationHistory,
212
+ timestamp: Date.now(),
213
+ });
214
+ this.log(`Sent ${this.conversationHistory.length} history entries to client`, "info");
215
+ }
216
+ // Send initial git status
217
+ const branchName = this.getBranchName();
218
+ const changes = this.getGitChanges();
219
+ this.sendToClient(ws, {
220
+ type: "git_status",
221
+ branchName,
222
+ changes,
223
+ timestamp: Date.now(),
224
+ });
225
+ ws.on("message", (data) => {
226
+ try {
227
+ const message = JSON.parse(data.toString());
228
+ this.handleMessage(ws, message);
229
+ }
230
+ catch {
231
+ this.sendToClient(ws, {
232
+ type: "error",
233
+ message: "Invalid JSON message",
234
+ timestamp: Date.now(),
235
+ });
236
+ }
237
+ });
238
+ ws.on("close", () => {
239
+ this.clients.delete(ws);
240
+ this.log("Client disconnected", "info");
241
+ });
242
+ ws.on("error", (error) => {
243
+ this.log(`WebSocket error: ${error.message}`, "error");
244
+ this.clients.delete(ws);
245
+ });
246
+ }
247
+ handleMessage(ws, message) {
248
+ // Handle new session request
249
+ if (this.isNewSessionMessage(message)) {
250
+ this.handleNewSession(ws);
251
+ return;
252
+ }
253
+ // Handle stop request
254
+ if (this.isStopMessage(message)) {
255
+ this.handleStop(ws);
256
+ return;
257
+ }
258
+ // Handle discard changes request
259
+ if (this.isDiscardChangesMessage(message)) {
260
+ this.handleDiscardChanges(ws);
261
+ return;
262
+ }
263
+ // Handle prompt message
264
+ if (this.isPromptMessage(message)) {
265
+ const promptId = message.id || randomUUID();
266
+ this.log(`Received prompt: ${message.content.substring(0, 50)}...`, "prompt");
267
+ this.executeWithSDK(ws, promptId, message.content);
268
+ return;
269
+ }
270
+ // Unknown message type
271
+ this.sendToClient(ws, {
272
+ type: "error",
273
+ message: 'Invalid message format. Expected: {"type":"prompt","content":"..."} or {"type":"new_session"} or {"type":"stop"} or {"type":"discard_changes"}',
274
+ timestamp: Date.now(),
275
+ });
276
+ }
277
+ handleNewSession(ws) {
278
+ // Abort any running query
279
+ if (this.abortController) {
280
+ this.abortController.abort();
281
+ this.abortController = null;
282
+ }
283
+ this.currentQuery = null;
284
+ // Clear session and history
285
+ this.sessionId = null;
286
+ this.conversationHistory = [];
287
+ this.clearSessionFromFile();
288
+ // Notify client
289
+ this.sendToClient(ws, {
290
+ type: "session_cleared",
291
+ timestamp: Date.now(),
292
+ });
293
+ this.log("Session cleared - starting fresh", "info");
294
+ }
295
+ handleStop(ws) {
296
+ if (this.abortController) {
297
+ this.abortController.abort();
298
+ this.log("Query stopped by user", "info");
299
+ }
300
+ this.sendToClient(ws, {
301
+ type: "stopped",
302
+ timestamp: Date.now(),
303
+ });
304
+ }
305
+ handleDiscardChanges(ws) {
306
+ this.log("Discarding all git changes...", "info");
307
+ try {
308
+ // Reset tracked files to HEAD
309
+ execSync("git checkout -- .", {
310
+ cwd: this.projectRoot,
311
+ stdio: ["pipe", "pipe", "pipe"],
312
+ });
313
+ // Remove untracked files and directories
314
+ execSync("git clean -fd", {
315
+ cwd: this.projectRoot,
316
+ stdio: ["pipe", "pipe", "pipe"],
317
+ });
318
+ this.log("All changes discarded", "success");
319
+ // Broadcast updated git status to all clients
320
+ const branchName = this.getBranchName();
321
+ const changes = this.getGitChanges();
322
+ this.broadcastGitStatus(branchName, changes);
323
+ }
324
+ catch (error) {
325
+ const errorMessage = error instanceof Error ? error.message : String(error);
326
+ this.log(`Failed to discard changes: ${errorMessage}`, "error");
327
+ this.sendToClient(ws, {
328
+ type: "error",
329
+ message: `Failed to discard changes: ${errorMessage}`,
330
+ timestamp: Date.now(),
331
+ });
332
+ }
333
+ }
334
+ isPromptMessage(message) {
335
+ return (typeof message === "object" &&
336
+ message !== null &&
337
+ "type" in message &&
338
+ message.type === "prompt" &&
339
+ "content" in message &&
340
+ typeof message.content === "string");
341
+ }
342
+ isNewSessionMessage(message) {
343
+ return (typeof message === "object" &&
344
+ message !== null &&
345
+ "type" in message &&
346
+ message.type === "new_session");
347
+ }
348
+ isStopMessage(message) {
349
+ return (typeof message === "object" &&
350
+ message !== null &&
351
+ "type" in message &&
352
+ message.type === "stop");
353
+ }
354
+ isDiscardChangesMessage(message) {
355
+ return (typeof message === "object" &&
356
+ message !== null &&
357
+ "type" in message &&
358
+ message.type === "discard_changes");
359
+ }
360
+ async executeWithSDK(ws, promptId, content) {
361
+ // Add user prompt to history
362
+ this.conversationHistory.push({
363
+ role: "user",
364
+ content,
365
+ timestamp: Date.now(),
366
+ });
367
+ // Send processing status
368
+ this.sendToClient(ws, {
369
+ type: "status",
370
+ status: "processing",
371
+ promptId,
372
+ timestamp: Date.now(),
373
+ });
374
+ this.log("Executing with Claude Agent SDK...", "info");
375
+ // Create abort controller for this query
376
+ this.abortController = new AbortController();
377
+ try {
378
+ // Create the query with Claude Agent SDK
379
+ this.currentQuery = query({
380
+ prompt: content,
381
+ options: {
382
+ cwd: this.projectRoot,
383
+ abortController: this.abortController,
384
+ includePartialMessages: true,
385
+ permissionMode: "acceptEdits", // Auto-accept edits for dev workflow
386
+ systemPrompt: `You are Claude, running as part of Expo Flow - an AI-powered development tool that runs on the developer's local machine and developer runs the app on their phone with a widget that help him develop the app on the go.
387
+
388
+ IMPORTANT CONSTRAINTS:
389
+ - This environment uses Expo's Over-The-Air (OTA) updates for rapid iteration
390
+ - DO NOT add new npm/yarn packages unless the user EXPLICITLY asks for it
391
+ - Adding new packages requires the developer to completely reset and rebuild the native app, which is a slow and disruptive process
392
+ - If a feature could be implemented with existing packages or vanilla JavaScript/TypeScript, prefer that approach
393
+ - If a new package is truly necessary, clearly warn the user that adding it will require a full app rebuild
394
+ `,
395
+ tools: {
396
+ type: "preset",
397
+ preset: "claude_code",
398
+ },
399
+ // Resume existing session if we have one
400
+ ...(this.sessionId && { resume: this.sessionId }),
401
+ // Hook into tool usage for real-time updates
402
+ hooks: {
403
+ PreToolUse: [
404
+ {
405
+ hooks: [
406
+ async (input) => {
407
+ if (input.hook_event_name === "PreToolUse") {
408
+ this.sendToClient(ws, {
409
+ type: "tool",
410
+ promptId,
411
+ toolName: input.tool_name,
412
+ status: "started",
413
+ input: input.tool_input,
414
+ timestamp: Date.now(),
415
+ });
416
+ this.log(`Tool started: ${input.tool_name}`, "info");
417
+ }
418
+ return {};
419
+ },
420
+ ],
421
+ },
422
+ ],
423
+ PostToolUse: [
424
+ {
425
+ hooks: [
426
+ async (input) => {
427
+ if (input.hook_event_name === "PostToolUse") {
428
+ this.sendToClient(ws, {
429
+ type: "tool",
430
+ promptId,
431
+ toolName: input.tool_name,
432
+ status: "completed",
433
+ output: input.tool_response,
434
+ timestamp: Date.now(),
435
+ });
436
+ this.log(`Tool completed: ${input.tool_name}`, "success");
437
+ }
438
+ return {};
439
+ },
440
+ ],
441
+ },
442
+ ],
443
+ PostToolUseFailure: [
444
+ {
445
+ hooks: [
446
+ async (input) => {
447
+ if (input.hook_event_name === "PostToolUseFailure") {
448
+ this.sendToClient(ws, {
449
+ type: "tool",
450
+ promptId,
451
+ toolName: input.tool_name,
452
+ status: "failed",
453
+ output: input.error,
454
+ timestamp: Date.now(),
455
+ });
456
+ this.log(`Tool failed: ${input.tool_name}`, "error");
457
+ }
458
+ return {};
459
+ },
460
+ ],
461
+ },
462
+ ],
463
+ },
464
+ },
465
+ });
466
+ // Stream messages from the SDK
467
+ for await (const message of this.currentQuery) {
468
+ // Capture session_id from first message if we don't have one
469
+ if (!this.sessionId && "session_id" in message && message.session_id) {
470
+ this.sessionId = message.session_id;
471
+ this.saveSession();
472
+ }
473
+ // Handle different message types
474
+ if (message.type === "assistant") {
475
+ // Extract text content from assistant message
476
+ const messageContent = message.message.content;
477
+ if (Array.isArray(messageContent)) {
478
+ for (const block of messageContent) {
479
+ if (block.type === "text") {
480
+ this.sendToClient(ws, {
481
+ type: "stream",
482
+ promptId,
483
+ chunk: block.text,
484
+ done: false,
485
+ timestamp: Date.now(),
486
+ });
487
+ }
488
+ }
489
+ }
490
+ }
491
+ else if (message.type === "stream_event") {
492
+ // Handle partial/streaming content
493
+ const event = message.event;
494
+ if (event.type === "content_block_delta" &&
495
+ event.delta.type === "text_delta") {
496
+ this.sendToClient(ws, {
497
+ type: "stream",
498
+ promptId,
499
+ chunk: event.delta.text,
500
+ done: false,
501
+ timestamp: Date.now(),
502
+ });
503
+ }
504
+ }
505
+ else if (message.type === "result") {
506
+ // Final result
507
+ const isSuccess = message.subtype === "success";
508
+ this.sendToClient(ws, {
509
+ type: "stream",
510
+ promptId,
511
+ chunk: "",
512
+ done: true,
513
+ timestamp: Date.now(),
514
+ });
515
+ this.sendToClient(ws, {
516
+ type: "result",
517
+ promptId,
518
+ success: isSuccess,
519
+ result: isSuccess ? message.result : undefined,
520
+ error: !isSuccess ? message.errors?.join(", ") : undefined,
521
+ costUsd: message.total_cost_usd,
522
+ durationMs: message.duration_ms,
523
+ timestamp: Date.now(),
524
+ });
525
+ if (isSuccess) {
526
+ // Add assistant response to history
527
+ if (message.result) {
528
+ this.conversationHistory.push({
529
+ role: "assistant",
530
+ content: message.result,
531
+ timestamp: Date.now(),
532
+ });
533
+ this.saveSession();
534
+ }
535
+ this.log(`Completed in ${message.duration_ms}ms, cost: $${message.total_cost_usd?.toFixed(4)}`, "success");
536
+ }
537
+ else {
538
+ this.log(`Failed: ${message.errors?.join(", ")}`, "error");
539
+ }
540
+ }
541
+ }
542
+ }
543
+ catch (error) {
544
+ const errorMessage = error instanceof Error ? error.message : String(error);
545
+ this.log(`SDK error: ${errorMessage}`, "error");
546
+ this.sendToClient(ws, {
547
+ type: "error",
548
+ promptId,
549
+ message: errorMessage,
550
+ timestamp: Date.now(),
551
+ });
552
+ }
553
+ finally {
554
+ this.currentQuery = null;
555
+ this.abortController = null;
556
+ // Send idle status
557
+ this.sendToClient(ws, {
558
+ type: "status",
559
+ status: "idle",
560
+ timestamp: Date.now(),
561
+ });
562
+ }
563
+ }
564
+ sendToClient(ws, message) {
565
+ if (ws.readyState === WebSocket.OPEN) {
566
+ ws.send(JSON.stringify(message));
567
+ }
568
+ }
569
+ log(message, level) {
570
+ const timestamp = new Date().toLocaleTimeString();
571
+ const prefix = chalk.gray(` [${timestamp}]`);
572
+ switch (level) {
573
+ case "info":
574
+ console.log(`${prefix} ${chalk.blue("INFO")} ${message}`);
575
+ break;
576
+ case "error":
577
+ console.log(`${prefix} ${chalk.red("ERROR")} ${message}`);
578
+ break;
579
+ case "success":
580
+ console.log(`${prefix} ${chalk.green("SUCCESS")} ${message}`);
581
+ break;
582
+ case "prompt":
583
+ console.log(`${prefix} ${chalk.yellow("PROMPT")} ${message}`);
584
+ break;
585
+ case "output":
586
+ console.log(`${prefix} ${chalk.cyan("OUTPUT")} ${message}`);
587
+ break;
588
+ }
589
+ }
590
+ }
591
+ //# sourceMappingURL=promptServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promptServer.js","sourceRoot":"","sources":["../../server/promptServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"root":["../bin/expo-air.ts","../commands/fly.ts","../commands/init.ts","../commands/server.ts","../commands/start.ts","../server/promptserver.ts","../tunnel/bore.ts","../tunnel/cloudflare.ts","../tunnel/localhost-run.ts","../tunnel/localtunnel.ts","../types/messages.ts"],"version":"5.9.3"}
@@ -0,0 +1,24 @@
1
+ interface BoreConfig {
2
+ localPort: number;
3
+ server?: string;
4
+ remotePort?: number;
5
+ secret?: string;
6
+ }
7
+ interface TunnelInfo {
8
+ url: string;
9
+ host: string;
10
+ port: number;
11
+ }
12
+ export declare class BoreTunnel {
13
+ private process;
14
+ private tunnelUrl;
15
+ private binPath;
16
+ constructor();
17
+ ensureBinary(): Promise<void>;
18
+ private downloadFile;
19
+ start(config: BoreConfig): Promise<TunnelInfo>;
20
+ stop(): Promise<void>;
21
+ getUrl(): string | null;
22
+ }
23
+ export {};
24
+ //# sourceMappingURL=bore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bore.d.ts","sourceRoot":"","sources":["../../tunnel/bore.ts"],"names":[],"mappings":"AASA,UAAU,UAAU;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,UAAU;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,OAAO,CAAS;;IAUlB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAgDnC,OAAO,CAAC,YAAY;IAkCd,KAAK,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAqE9C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B,MAAM,IAAI,MAAM,GAAG,IAAI;CAGxB"}