opencode-mobile 1.0.0 → 1.0.1

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 ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 OpenCode
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,291 @@
1
+ # OpenCode Mobile Plugin
2
+
3
+ A mobile push notification plugin for OpenCode, built with TypeScript and Bun runtime. The plugin provides push notification capabilities through Expo Push Notifications service, with tunnel management for mobile device connectivity.
4
+
5
+ ## Features
6
+
7
+ - **Push Notifications**: Send push notifications via Expo Push Notifications service
8
+ - **Tunnel Management**: Support for Cloudflare and ngrok tunnels for mobile device connectivity
9
+ - **Reverse Proxy**: Built-in HTTP proxy server for handling notifications
10
+ - **QR Code Support**: Generate QR codes for easy tunnel URL sharing
11
+
12
+ ## Prerequisites
13
+
14
+ - [Bun](https://bun.sh/) runtime (v1.0+)
15
+ - TypeScript 5.0+
16
+ - Valid Expo account and project credentials
17
+
18
+ ## Installation
19
+
20
+ ```bash
21
+ # Install dependencies
22
+ bun install
23
+ ```
24
+
25
+ ## Usage
26
+
27
+ ### Run the Main Plugin
28
+
29
+ ```bash
30
+ bun run index.ts
31
+ ```
32
+
33
+ ### Run Push Notifications Directly
34
+
35
+ ```bash
36
+ bun run push-notifications.ts
37
+ ```
38
+
39
+ ### Build and Type-Check
40
+
41
+ ```bash
42
+ # Type-check only (no emit)
43
+ npx tsc --noEmit
44
+
45
+ # Compile TypeScript to JavaScript
46
+ npx tsc
47
+
48
+ # Build and type-check
49
+ npm run build
50
+ ```
51
+
52
+ ### Linting
53
+
54
+ ```bash
55
+ npx eslint "**/*.ts" --fix
56
+ ```
57
+
58
+ ### Testing
59
+
60
+ ```bash
61
+ bun test
62
+ bun test <test-file>.test.ts
63
+ bun test --test-name-pattern="test name"
64
+ ```
65
+
66
+ ## Project Structure
67
+
68
+ ```
69
+ /Users/rodri/.config/opencode/opencode-mobile-plugin/
70
+ ├── index.ts # Main barrel export
71
+ ├── push-notifications.ts # Core plugin logic (main entry point)
72
+ ├── tunnel-manager.ts # Tunnel management (Cloudflare/ngrok)
73
+ ├── reverse-proxy.ts # HTTP proxy server
74
+ ├── hello-world.ts # Example plugin
75
+ ├── tsconfig.json # TypeScript configuration
76
+ ├── package.json # Dependencies and scripts
77
+ ├── AGENTS.md # Agent instructions and project guidelines
78
+ └── dist/ # Compiled output
79
+ ```
80
+
81
+ ## Configuration
82
+
83
+ ### Environment Variables
84
+
85
+ - `OPENCODE_PORT`: Port for the local server (default: 3000)
86
+ - `EXPO_PROJECT_ID`: Your Expo project ID
87
+ - `TUNNEL_PROVIDER`: Tunnel provider to use (`cloudflare` or `ngrok`)
88
+
89
+ ### Tunnel Configuration
90
+
91
+ The plugin supports two tunnel providers:
92
+
93
+ 1. **Cloudflare** (`cloudflared`): Zero-config tunnel with Cloudflare's secure infrastructure
94
+ 2. **ngrok**: Popular ngrok tunnel with custom domain support
95
+
96
+ ## Code Style Guidelines
97
+
98
+ ### Imports
99
+
100
+ ```typescript
101
+ // Standard library - namespace imports
102
+ import * as fs from "fs";
103
+ import * as path from "path";
104
+
105
+ // External modules - named or default imports
106
+ import ngrok from "ngrok";
107
+ import qrcode from "qrcode";
108
+
109
+ // Types - use import type when only using types
110
+ import type { Plugin } from "@opencode-ai/plugin";
111
+ import type { TunnelConfig } from "./tunnel-manager";
112
+
113
+ // Group imports logically: types → external modules → internal modules
114
+ import type { Plugin } from "@opencode-ai/plugin";
115
+ import * as fs from "fs";
116
+ import * as path from "path";
117
+ import { startTunnel } from "./tunnel-manager";
118
+ ```
119
+
120
+ ### Formatting
121
+
122
+ - **2 spaces** for indentation
123
+ - **Single quotes** for strings
124
+ - **Semicolons** at end of statements
125
+ - **Trailing commas** in multi-line objects/arrays
126
+ - **Max line length**: ~100 characters (soft limit)
127
+
128
+ ### Types
129
+
130
+ ```typescript
131
+ // Use interfaces for object shapes
132
+ interface PushToken {
133
+ token: string;
134
+ platform: "ios" | "android";
135
+ deviceId: string;
136
+ registeredAt: string;
137
+ }
138
+
139
+ // Use type aliases for unions/primitives
140
+ type NotificationHandler = (notification: Notification) => Promise<void>;
141
+
142
+ // Explicit return types for public functions
143
+ function loadTokens(): PushToken[] {
144
+ // ...
145
+ }
146
+
147
+ // Avoid `any` - use `unknown` with type guards when uncertain
148
+ function safeParse(data: unknown): Record<string, any> {
149
+ if (typeof data === "string") {
150
+ try {
151
+ return JSON.parse(data);
152
+ } catch {
153
+ return {};
154
+ }
155
+ }
156
+ return data as Record<string, any>;
157
+ }
158
+ ```
159
+
160
+ ### Naming Conventions
161
+
162
+ | Pattern | Convention | Example |
163
+ |---------|------------|---------|
164
+ | Constants | UPPER_SNAKE_CASE | `TOKEN_FILE`, `BUN_SERVER_PORT` |
165
+ | Functions/variables | camelCase | `loadTokens`, `startTunnel` |
166
+ | Interfaces/classes | PascalCase | `PushToken`, `TunnelConfig` |
167
+ | Private/internal | prefix with `_` | `_bunServer`, `_pluginInitialized` |
168
+ | Booleans | prefix with `is`, `has`, `should` | `isRunning`, `hasStarted` |
169
+
170
+ ### Error Handling
171
+
172
+ ```typescript
173
+ // Always wrap async operations in try-catch
174
+ try {
175
+ await someAsyncOperation();
176
+ } catch (error: any) {
177
+ // Log errors with module prefix
178
+ console.error("[ModuleName] Error message:", error.message);
179
+
180
+ // Provide context in error messages
181
+ if (error.message?.includes("specific case")) {
182
+ console.error("[PushPlugin] Handle specific error:", error.message);
183
+ } else {
184
+ console.error("[PushPlugin] Unexpected error:", error.message);
185
+ }
186
+ }
187
+
188
+ // Handle specific error types when possible
189
+ if (error instanceof ValidationError) {
190
+ // Handle validation errors
191
+ }
192
+ ```
193
+
194
+ ### Console Logging
195
+
196
+ - Use **module prefixes** in all console output: `[PushPlugin]`, `[Tunnel]`, `[Proxy]`
197
+ - Use **emojis** for status indicators: `✅`, `❌`, `💡`, `ℹ️`
198
+ - Log important steps and results
199
+
200
+ ```typescript
201
+ console.log('[PushPlugin] Starting...');
202
+ console.error('[PushPlugin] Failed:', error.message);
203
+ console.log(`[Tunnel] URL: ${url}`);
204
+ console.log('✅ Server started successfully');
205
+ console.log('❌ Connection failed:', error.message);
206
+ ```
207
+
208
+ ### Async/Await
209
+
210
+ ```typescript
211
+ // Use async/await over raw promises
212
+ async function startServer(): Promise<void> {
213
+ try {
214
+ await startProxy();
215
+ await startTunnel();
216
+ } catch (error) {
217
+ // handle error
218
+ }
219
+ }
220
+
221
+ // Never leave promises unhandled
222
+ // Use Promise.all() for parallel operations
223
+ const [result1, result2] = await Promise.all([
224
+ operation1(),
225
+ operation2(),
226
+ ]);
227
+ ```
228
+
229
+ ## Plugin Architecture
230
+
231
+ ### Entry Points
232
+
233
+ - **Main entry**: `index.ts` (barrel export)
234
+ - **Plugin entry**: `push-notifications.ts` (main plugin logic)
235
+ - **Compiled output**: `dist/index.js`
236
+
237
+ ### Plugin Interface
238
+
239
+ All plugins must export a function matching the `Plugin` type from `@opencode-ai/plugin`:
240
+
241
+ ```typescript
242
+ import type { Plugin } from "@opencode-ai/plugin";
243
+
244
+ export const MyPlugin: Plugin = async (ctx) => {
245
+ // Initialize plugin
246
+ return {
247
+ event: async ({ event }) => {
248
+ // Handle event
249
+ },
250
+ };
251
+ };
252
+
253
+ export default MyPlugin;
254
+ ```
255
+
256
+ ### Signal Handling
257
+
258
+ ```typescript
259
+ // Handle process signals for graceful shutdown
260
+ const signals = ["SIGINT", "SIGTERM", "SIGHUP"];
261
+ signals.forEach((signal) => {
262
+ process.on(signal, async () => {
263
+ await gracefulShutdown();
264
+ process.exit(0);
265
+ });
266
+ });
267
+ ```
268
+
269
+ ## Dependencies
270
+
271
+ - `@opencode-ai/plugin`: Core plugin interface
272
+ - `ngrok`: Ngrok tunnel provider
273
+ - `cloudflared`: Cloudflare tunnel provider
274
+ - `qrcode`: QR code generation
275
+ - `bun`: Runtime environment
276
+
277
+ ## License
278
+
279
+ MIT License - see [LICENSE](LICENSE) file for details.
280
+
281
+ ## Contributing
282
+
283
+ 1. Fork the repository
284
+ 2. Create a feature branch
285
+ 3. Make your changes following the code style guidelines
286
+ 4. Run linting and tests
287
+ 5. Submit a pull request
288
+
289
+ ## Support
290
+
291
+ For issues and feature requests, please use the GitHub issue tracker.
@@ -1 +1 @@
1
- {"version":3,"file":"push-notifications.d.ts","sourceRoot":"","sources":["../push-notifications.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAiKlD,eAAO,MAAM,sBAAsB,EAAE,MAsKpC,CAAC;AAYF,eAAe,sBAAsB,CAAC"}
1
+ {"version":3,"file":"push-notifications.d.ts","sourceRoot":"","sources":["../push-notifications.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAiKlD,eAAO,MAAM,sBAAsB,EAAE,MAgHpC,CAAC;AAYF,eAAe,sBAAsB,CAAC"}
@@ -1,4 +1,3 @@
1
- import * as fs from "fs";
2
1
  import * as path from "path";
3
2
  import { startTunnel, stopTunnel, displayQRCode as displayQR, getTunnelDetails } from "./src/tunnel";
4
3
  import { getNextAvailablePort } from "./src/utils/port";
@@ -152,12 +151,12 @@ export const PushNotificationPlugin = async (ctx) => {
152
151
  };
153
152
  }
154
153
  const serverPort = parseInt(String(ctx.serverUrl?.port || 4096), 10);
155
- logger.info(`App started. Creating tunnel with ngrok to port ${serverPort}`);
156
- // Test logging with different levels
157
- logger.debug("Detailed development info - appears only with --log-level DEBUG");
158
- logger.info("Standard operational message - appears with --log-level INFO, WARN, ERROR");
159
- logger.warn("Non-critical issue warning - appears with --log-level WARN, ERROR");
160
- logger.error("Critical failure message - appears only with --log-level ERROR");
154
+ logger.info(`App started. Creating tunnel on port ${serverPort}`);
155
+ // Test logging levels (dev-only verbose output)
156
+ logger.dev("Detailed development info - only appears in dev mode");
157
+ logger.info("Standard operational message - appears in both dev and prod");
158
+ logger.warn("Non-critical issue warning");
159
+ logger.error("Critical failure message");
161
160
  // Get server port from ctx, find next available for push-token
162
161
  const pushTokenPort = await getNextAvailablePort(serverPort + 1);
163
162
  bunServerPort = pushTokenPort;
@@ -181,58 +180,8 @@ export const PushNotificationPlugin = async (ctx) => {
181
180
  errorMsg.includes("connect to api.ngrok.com");
182
181
  if (isAuthIssue) {
183
182
  logger.info("Ngrok needs authtoken (ERR_NGROK_4018)");
184
- const readline = await import("readline");
185
- const rl = readline.createInterface({
186
- input: process.stdin,
187
- output: process.stdout,
188
- });
189
- const newToken = await new Promise((resolve) => {
190
- rl.question("[?] Enter ngrok authtoken (or Enter to skip): ", async (token) => {
191
- rl.close();
192
- resolve(token && token.trim().length > 25 ? token.trim() : null);
193
- });
194
- });
195
- if (newToken) {
196
- logger.info("Writing ngrok config...");
197
- // Basic validation - ngrok authtokens are typically 50+ characters
198
- if (!newToken || newToken.length < 25) {
199
- logger.error("Invalid authtoken format");
200
- ngrokFailed = true;
201
- }
202
- else {
203
- try {
204
- const { writeFileSync, existsSync, mkdirSync } = fs;
205
- const configPath = `${process.env.HOME}/Library/Application Support/ngrok/ngrok.yml`;
206
- const configDir = `${process.env.HOME}/Library/Application Support/ngrok`;
207
- if (!existsSync(configDir)) {
208
- mkdirSync(configDir, { recursive: true });
209
- }
210
- // Escape any special characters that could break YAML
211
- const escapedToken = newToken.replace(/[:\[\]{}|>&*?!@]/g, '\\$&');
212
- const v3Config = `version: "3"
213
-
214
- agent:
215
- authtoken: ${escapedToken}
216
- `;
217
- writeFileSync(configPath, v3Config, { mode: 0o600 });
218
- logger.info(`Config: ${configPath}`);
219
- // Retry with new authtoken (pass it directly to ngrok.connect)
220
- tunnelInfo = await startTunnel({
221
- port: serverPort,
222
- provider: "ngrok",
223
- authToken: newToken
224
- });
225
- logger.info("Ngrok tunnel active!");
226
- }
227
- catch (retryError) {
228
- logger.error(`Retry failed: ${retryError.message}`);
229
- ngrokFailed = true;
230
- }
231
- }
232
- }
233
- else {
234
- ngrokFailed = true;
235
- }
183
+ logger.info("Skipping ngrok setup - will use fallback tunnels");
184
+ ngrokFailed = true;
236
185
  }
237
186
  else {
238
187
  ngrokFailed = true;
@@ -251,7 +200,7 @@ agent:
251
200
  if (!tunnelInfo) {
252
201
  throw new Error("Failed to establish tunnel");
253
202
  }
254
- await displayQR(tunnelInfo.url);
203
+ displayQR(tunnelInfo);
255
204
  return {
256
205
  event: async ({ event }) => {
257
206
  // Format notification from event
@@ -277,7 +226,7 @@ agent:
277
226
  });
278
227
  // Send the push notification
279
228
  await sendPush(notification);
280
- logger.debug("Push notification sent successfully");
229
+ logger.dev("Push notification sent successfully");
281
230
  },
282
231
  };
283
232
  }
@@ -1 +1 @@
1
- {"version":3,"file":"push-notifications.js","sourceRoot":"","sources":["../push-notifications.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"push-notifications.js","sourceRoot":"","sources":["../push-notifications.ts"],"names":[],"mappings":"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"}
@@ -3,10 +3,12 @@ interface LoggerConfig {
3
3
  level: LogLevel;
4
4
  prefix: string;
5
5
  showTimestamp: boolean;
6
+ devMode: boolean;
6
7
  }
7
8
  export declare function configureLogger(config: Partial<LoggerConfig>): void;
8
9
  export declare function createLogger(service: string): {
9
10
  debug: (message: string, data?: Record<string, unknown>) => void;
11
+ dev: (message: string, data?: Record<string, unknown>) => void;
10
12
  info: (message: string, data?: Record<string, unknown>) => void;
11
13
  warn: (message: string, data?: Record<string, unknown>) => void;
12
14
  error: (message: string, extra?: Record<string, unknown> | Error | unknown) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"sdk-logger.d.ts","sourceRoot":"","sources":["../sdk-logger.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,UAAU,YAAY;IACpB,KAAK,EAAE,QAAQ,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;CACxB;AAUD,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAEnE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG;IAC7C,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACjE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAChE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAChE,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,GAAG,OAAO,KAAK,IAAI,CAAC;IACpF,GAAG,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CACjF,CAyEA;AAGD,wBAAgB,GAAG,CACjB,KAAK,EAAE,QAAQ,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,IAAI,CAGN;AAGD,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"sdk-logger.d.ts","sourceRoot":"","sources":["../sdk-logger.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,UAAU,YAAY;IACpB,KAAK,EAAE,QAAQ,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;CAClB;AAeD,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAEnE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG;IAC7C,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACjE,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC/D,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAChE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAChE,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,GAAG,OAAO,KAAK,IAAI,CAAC;IACpF,GAAG,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CACjF,CA6EA;AAGD,wBAAgB,GAAG,CACjB,KAAK,EAAE,QAAQ,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,IAAI,CAGN;AAGD,eAAe,YAAY,CAAC"}
@@ -1,7 +1,11 @@
1
+ // Check if we're in development mode (not published to npm)
2
+ const isDevMode = process.env.NODE_ENV !== "production" &&
3
+ !process.env.npm_package_version;
1
4
  const defaultConfig = {
2
- level: process.env.LOG_LEVEL || "debug",
5
+ level: process.env.LOG_LEVEL || (isDevMode ? "debug" : "info"),
3
6
  prefix: "App",
4
7
  showTimestamp: true,
8
+ devMode: isDevMode,
5
9
  };
6
10
  let globalConfig = { ...defaultConfig };
7
11
  export function configureLogger(config) {
@@ -39,6 +43,14 @@ export function createLogger(service) {
39
43
  if (data)
40
44
  console.debug("[DEBUG-DATA]", JSON.stringify(data, null, 2));
41
45
  },
46
+ dev: (message, data) => {
47
+ // Only log in development mode
48
+ if (!globalConfig.devMode)
49
+ return;
50
+ console.log(formatMessage("debug", message));
51
+ if (data)
52
+ console.debug("[DEV-DATA]", JSON.stringify(data, null, 2));
53
+ },
42
54
  info: (message, data) => {
43
55
  if (!shouldLog("info"))
44
56
  return;
@@ -58,7 +70,6 @@ export function createLogger(service) {
58
70
  return;
59
71
  console.error(formatMessage("error", message));
60
72
  if (extra) {
61
- // If it's an Error object or has a stack property, treat as error
62
73
  if (extra instanceof Error || extra?.stack) {
63
74
  console.error("[ERROR]", extra);
64
75
  if (extra instanceof Error) {
@@ -66,11 +77,9 @@ export function createLogger(service) {
66
77
  }
67
78
  }
68
79
  else if (typeof extra === "object" && extra !== null) {
69
- // Treat as structured extra data
70
80
  console.error("[ERROR-EXTRA]", JSON.stringify(extra, null, 2));
71
81
  }
72
82
  else {
73
- // Primitive value or unknown type
74
83
  console.error("[ERROR-DETAILS]", extra);
75
84
  }
76
85
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sdk-logger.js","sourceRoot":"","sources":["../sdk-logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sdk-logger.js","sourceRoot":"","sources":["../sdk-logger.ts"],"names":[],"mappings":"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"}
@@ -8,12 +8,12 @@ import qrcodeTerminal from "qrcode-terminal";
8
8
  */
9
9
  export function displayQRCode(url) {
10
10
  console.log("\n=== OpenCode Push Plugin ===\n");
11
+ console.log(`${url}\n`);
11
12
  console.log("Scan to connect mobile device:\n");
12
13
  qrcodeTerminal.generate(url, { small: true }, (qrcode) => {
13
14
  console.log(qrcode);
14
15
  });
15
- console.log(`\n${url}\n`);
16
- console.log("Or visit the URL above to register your device.\n");
16
+ console.log("\nOr scan the QR code above to register your device.\n");
17
17
  }
18
18
  /**
19
19
  * Generate QR code as data URL
@@ -1 +1 @@
1
- {"version":3,"file":"qrcode.js","sourceRoot":"","sources":["../../../src/tunnel/qrcode.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,cAAc,MAAM,iBAAiB,CAAC;AAE7C;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAChD,cAAc,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,MAAc,EAAE,EAAE;QAC/D,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;AACnE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,GAAW;IACrD,OAAO,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"qrcode.js","sourceRoot":"","sources":["../../../src/tunnel/qrcode.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,cAAc,MAAM,iBAAiB,CAAC;AAE7C;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAChD,cAAc,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,MAAc,EAAE,EAAE;QAC/D,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,GAAW;IACrD,OAAO,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-mobile",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Mobile push notification plugin for OpenCode - enables push notifications via Expo for mobile devices",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -40,6 +40,7 @@
40
40
  "@opencode-ai/plugin": "^1.1.12",
41
41
  "cloudflared": "^0.1.1",
42
42
  "cloudflared-tunnel": "^1.0.3",
43
+ "expo": "^54.0.31",
43
44
  "localtunnel": "^2.0.2",
44
45
  "ngrok": "^5.0.0-beta.2",
45
46
  "qrcode": "^1.5.4",
@@ -182,13 +182,13 @@ export const PushNotificationPlugin: Plugin = async (ctx) => {
182
182
  }
183
183
 
184
184
  const serverPort = parseInt(String((ctx as any).serverUrl?.port || 4096), 10);
185
- logger.info(`App started. Creating tunnel with ngrok to port ${serverPort}`);
185
+ logger.info(`App started. Creating tunnel on port ${serverPort}`);
186
186
 
187
- // Test logging with different levels
188
- logger.debug("Detailed development info - appears only with --log-level DEBUG");
189
- logger.info("Standard operational message - appears with --log-level INFO, WARN, ERROR");
190
- logger.warn("Non-critical issue warning - appears with --log-level WARN, ERROR");
191
- logger.error("Critical failure message - appears only with --log-level ERROR");
187
+ // Test logging levels (dev-only verbose output)
188
+ logger.dev("Detailed development info - only appears in dev mode");
189
+ logger.info("Standard operational message - appears in both dev and prod");
190
+ logger.warn("Non-critical issue warning");
191
+ logger.error("Critical failure message");
192
192
 
193
193
  // Get server port from ctx, find next available for push-token
194
194
  const pushTokenPort = await getNextAvailablePort(serverPort + 1);
@@ -217,62 +217,8 @@ export const PushNotificationPlugin: Plugin = async (ctx) => {
217
217
 
218
218
  if (isAuthIssue) {
219
219
  logger.info("Ngrok needs authtoken (ERR_NGROK_4018)");
220
-
221
- const readline = await import("readline");
222
- const rl = readline.createInterface({
223
- input: process.stdin,
224
- output: process.stdout,
225
- });
226
-
227
- const newToken = await new Promise<string | null>((resolve) => {
228
- rl.question("[?] Enter ngrok authtoken (or Enter to skip): ", async (token) => {
229
- rl.close();
230
- resolve(token && token.trim().length > 25 ? token.trim() : null);
231
- });
232
- });
233
-
234
- if (newToken) {
235
- logger.info("Writing ngrok config...");
236
-
237
- // Basic validation - ngrok authtokens are typically 50+ characters
238
- if (!newToken || newToken.length < 25) {
239
- logger.error("Invalid authtoken format");
240
- ngrokFailed = true;
241
- } else {
242
- try {
243
- const { writeFileSync, existsSync, mkdirSync } = fs;
244
- const configPath = `${process.env.HOME}/Library/Application Support/ngrok/ngrok.yml`;
245
- const configDir = `${process.env.HOME}/Library/Application Support/ngrok`;
246
-
247
- if (!existsSync(configDir)) {
248
- mkdirSync(configDir, { recursive: true });
249
- }
250
-
251
- // Escape any special characters that could break YAML
252
- const escapedToken = newToken.replace(/[:\[\]{}|>&*?!@]/g, '\\$&');
253
- const v3Config = `version: "3"
254
-
255
- agent:
256
- authtoken: ${escapedToken}
257
- `;
258
- writeFileSync(configPath, v3Config, { mode: 0o600 });
259
- logger.info(`Config: ${configPath}`);
260
-
261
- // Retry with new authtoken (pass it directly to ngrok.connect)
262
- tunnelInfo = await startTunnel({
263
- port: serverPort,
264
- provider: "ngrok",
265
- authToken: newToken
266
- });
267
- logger.info("Ngrok tunnel active!");
268
- } catch (retryError: any) {
269
- logger.error(`Retry failed: ${retryError.message}`);
270
- ngrokFailed = true;
271
- }
272
- }
273
- } else {
274
- ngrokFailed = true;
275
- }
220
+ logger.info("Skipping ngrok setup - will use fallback tunnels");
221
+ ngrokFailed = true;
276
222
  } else {
277
223
  ngrokFailed = true;
278
224
  }
@@ -291,8 +237,8 @@ agent:
291
237
  if (!tunnelInfo) {
292
238
  throw new Error("Failed to establish tunnel");
293
239
  }
294
-
295
- await displayQR(tunnelInfo.url);
240
+
241
+ displayQR(tunnelInfo);
296
242
 
297
243
  return {
298
244
  event: async ({ event }) => {
@@ -324,7 +270,7 @@ agent:
324
270
  // Send the push notification
325
271
  await sendPush(notification);
326
272
 
327
- logger.debug("Push notification sent successfully");
273
+ logger.dev("Push notification sent successfully");
328
274
  },
329
275
  };
330
276
  } catch (error: any) {