opencode-mobile 1.2.13 → 1.3.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.
@@ -1,163 +0,0 @@
1
- /**
2
- * Tunnel QR Code TUI Command
3
- * Displays QR code for tunnel URL with interactive TUI
4
- * Run with: npx opencode-mobile tunnel-qr
5
- */
6
- import * as fs from "fs";
7
- import * as path from "path";
8
- import { displayQRCode } from "../tunnel/qrcode.js";
9
- const CONFIG_DIR = path.join(process.env.HOME || "", ".config/opencode");
10
- const TUNNEL_METADATA_FILE = path.join(CONFIG_DIR, "tunnel.json");
11
- function loadMetadata() {
12
- try {
13
- if (fs.existsSync(TUNNEL_METADATA_FILE)) {
14
- const data = fs.readFileSync(TUNNEL_METADATA_FILE, "utf-8");
15
- return JSON.parse(data);
16
- }
17
- }
18
- catch (e) {
19
- console.error("[TunnelQR] Failed to load metadata:", e);
20
- }
21
- return null;
22
- }
23
- function clearScreen() {
24
- console.clear();
25
- }
26
- function drawBox(title, content) {
27
- const lines = content.split("\n");
28
- const maxWidth = Math.max(...lines.map((l) => l.length), title.length) + 4;
29
- console.log("┌" + "─".repeat(maxWidth - 2) + "┐");
30
- console.log("│ " + title.padEnd(maxWidth - 4) + " │");
31
- console.log("├" + "─".repeat(maxWidth - 2) + "┤");
32
- for (const line of lines) {
33
- console.log("│ " + line.padEnd(maxWidth - 4) + " │");
34
- }
35
- console.log("└" + "─".repeat(maxWidth - 2) + "┘");
36
- }
37
- function formatTimestamp(ts) {
38
- if (!ts)
39
- return "Never";
40
- const date = new Date(ts);
41
- return date.toLocaleString();
42
- }
43
- async function showTUI(url) {
44
- clearScreen();
45
- console.log("");
46
- console.log("═".repeat(60));
47
- console.log(" 🔗 OpenCode Mobile - Tunnel QR Code");
48
- console.log("═".repeat(60));
49
- console.log("");
50
- const metadata = loadMetadata();
51
- if (metadata) {
52
- console.log(" 📋 Tunnel Information:");
53
- console.log(" ─".repeat(30));
54
- console.log(` │ Provider: ${metadata.provider || "N/A"}`);
55
- console.log(` │ URL: ${metadata.url || "N/A"}`);
56
- console.log(` │ Tunnel ID: ${metadata.tunnelId || "N/A"}`);
57
- console.log(` │ Local: localhost:${metadata.port || "N/A"}`);
58
- console.log(` │ Target: localhost:${metadata.targetPort || "N/A"}`);
59
- console.log(` │ Started: ${formatTimestamp(metadata.startedAt)}`);
60
- console.log(` │ Updated: ${formatTimestamp(metadata.lastUpdated)}`);
61
- console.log("");
62
- }
63
- console.log(" 📱 Scan to connect:");
64
- console.log(" ─".repeat(30));
65
- console.log("");
66
- await displayQRCode(url);
67
- console.log("");
68
- console.log(" 💡 Tips:");
69
- console.log(" ─".repeat(30));
70
- console.log(" │ • Point camera at QR code");
71
- console.log(" │ • Ensure mobile device is on same network");
72
- console.log(" │ • Tunnel connects directly to OpenCode server");
73
- console.log(" │");
74
- console.log(" │ Press Ctrl+C to exit");
75
- console.log("");
76
- console.log("═".repeat(60));
77
- }
78
- async function showNoTunnel() {
79
- clearScreen();
80
- console.log("");
81
- console.log("═".repeat(60));
82
- console.log(" 🔗 OpenCode Mobile - Tunnel QR Code");
83
- console.log("═".repeat(60));
84
- console.log("");
85
- console.log(" ❌ No active tunnel found");
86
- console.log("");
87
- console.log(" 📋 To start a tunnel:");
88
- console.log(" ─".repeat(30));
89
- console.log(" │ 1. Start the plugin: bun run index.ts serve");
90
- console.log(" │ 2. Or run: npx opencode-mobile tunnel");
91
- console.log(" │ 3. The tunnel URL will be saved to:");
92
- console.log(` │ ${TUNNEL_METADATA_FILE}`);
93
- console.log("");
94
- console.log(" 🔄 Then run this command again:");
95
- console.log(" │ npx opencode-mobile tunnel-qr");
96
- console.log("");
97
- console.log("═".repeat(60));
98
- }
99
- async function main() {
100
- const args = process.argv.slice(2);
101
- if (args.includes("--help") || args.includes("-h")) {
102
- console.log(`
103
- OpenCode Mobile - Tunnel QR Code TUI
104
-
105
- USAGE:
106
- npx opencode-mobile tunnel-qr
107
-
108
- DESCRIPTION:
109
- Displays a QR code for the tunnel URL in an interactive TUI.
110
- Reads tunnel metadata from .config/opencode/tunnel.json
111
-
112
- OPTIONS:
113
- -h, --help Show this help message
114
- --refresh Refresh every 5 seconds (default: interactive)
115
-
116
- EXAMPLES:
117
- npx opencode-mobile tunnel-qr # Show QR code TUI
118
- npx opencode-mobile tunnel-qr --help # Show help
119
- `);
120
- return;
121
- }
122
- const metadata = loadMetadata();
123
- if (!metadata?.url) {
124
- await showNoTunnel();
125
- return;
126
- }
127
- const refresh = args.includes("--refresh");
128
- if (refresh) {
129
- let iterations = 0;
130
- const maxIterations = 12; // 1 minute
131
- while (iterations < maxIterations) {
132
- const currentMetadata = loadMetadata();
133
- if (!currentMetadata?.url) {
134
- console.log("\n ⏹️ Tunnel closed. Exiting...");
135
- break;
136
- }
137
- await showTUI(currentMetadata.url);
138
- console.log(` 🔄 Auto-refresh: ${iterations + 1}/${maxIterations} (Ctrl+C to stop)`);
139
- await new Promise((resolve) => setTimeout(resolve, 5000));
140
- iterations++;
141
- }
142
- }
143
- else {
144
- await showTUI(metadata.url);
145
- // Keep alive with signal handling
146
- await new Promise((resolve) => {
147
- const cleanup = () => {
148
- console.log("\n 👋 Goodbye!");
149
- resolve();
150
- };
151
- process.on("SIGINT", cleanup);
152
- process.on("SIGTERM", cleanup);
153
- // Exit after first display if not refreshing
154
- setTimeout(() => {
155
- process.removeListener("SIGINT", cleanup);
156
- process.removeListener("SIGTERM", cleanup);
157
- resolve();
158
- }, 100);
159
- });
160
- }
161
- }
162
- export { main };
163
- //# sourceMappingURL=tunnel-qr.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tunnel-qr.js","sourceRoot":"","sources":["../../../src/cli/tunnel-qr.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,kBAAkB,CAAC,CAAC;AACzE,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAYlE,SAAS,YAAY;IACnB,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;YAC5D,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,WAAW;IAClB,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC;AAED,SAAS,OAAO,CAAC,KAAa,EAAE,OAAe;IAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAE3E,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IAElD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,eAAe,CAAC,EAAiB;IACxC,IAAI,CAAC,EAAE;QAAE,OAAO,OAAO,CAAC;IACxB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1B,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;AAC/B,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,GAAW;IAChC,WAAW,EAAE,CAAC;IAEd,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAEhC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,mBAAmB,QAAQ,CAAC,QAAQ,IAAI,KAAK,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,mBAAmB,QAAQ,CAAC,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,mBAAmB,QAAQ,CAAC,QAAQ,IAAI,KAAK,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,6BAA6B,QAAQ,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,6BAA6B,QAAQ,CAAC,UAAU,IAAI,KAAK,EAAE,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,mBAAmB,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,mBAAmB,eAAe,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;IAEzB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED,KAAK,UAAU,YAAY;IACzB,WAAW,EAAE,CAAC;IAEd,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,WAAW,oBAAoB,EAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;CAiBf,CAAC,CAAC;QACC,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAEhC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC;QACnB,MAAM,YAAY,EAAE,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAE3C,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,MAAM,aAAa,GAAG,EAAE,CAAC,CAAC,WAAW;QAErC,OAAO,UAAU,GAAG,aAAa,EAAE,CAAC;YAClC,MAAM,eAAe,GAAG,YAAY,EAAE,CAAC;YAEvC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;gBACjD,MAAM;YACR,CAAC;YAED,MAAM,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,sBAAsB,UAAU,GAAG,CAAC,IAAI,aAAa,mBAAmB,CAAC,CAAC;YAEtF,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;YAC1D,UAAU,EAAE,CAAC;QACf,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAE5B,kCAAkC;QAClC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,MAAM,OAAO,GAAG,GAAG,EAAE;gBACnB,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;gBAC/B,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;YAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC9B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAE/B,6CAA6C;YAC7C,UAAU,CAAC,GAAG,EAAE;gBACd,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC1C,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBAC3C,OAAO,EAAE,CAAC;YACZ,CAAC,EAAE,GAAG,CAAC,CAAC;QACV,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,OAAO,EAAE,IAAI,EAAE,CAAC"}