@tunnelbox/cursor 0.1.6 → 0.1.8

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 (2) hide show
  1. package/dist/index.mjs +128 -36
  2. package/package.json +2 -2
package/dist/index.mjs CHANGED
@@ -10,12 +10,14 @@ import { existsSync as existsSync3, statSync as statSync2 } from "node:fs";
10
10
  import { hostname } from "node:os";
11
11
  import { resolve } from "node:path";
12
12
 
13
- // ../core/src/types.ts
13
+ // ../core/dist/index.js
14
+ import { randomBytes } from "crypto";
15
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
16
+ import { homedir } from "os";
17
+ import { dirname, join } from "path";
14
18
  function envelope(type, payload, id) {
15
19
  return { id, type, payload, ts: Date.now() };
16
20
  }
17
-
18
- // ../core/src/relay.ts
19
21
  var BASE_DELAY = 1e3;
20
22
  var MAX_DELAY = 15e3;
21
23
  var RelayClient = class {
@@ -98,14 +100,6 @@ var RelayClient = class {
98
100
  this.timer = setTimeout(() => this.open(), delay);
99
101
  }
100
102
  };
101
-
102
- // ../core/src/state.ts
103
- import { randomBytes } from "node:crypto";
104
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
105
- import { homedir } from "node:os";
106
- import { dirname, join } from "node:path";
107
-
108
- // ../core/locales/zh-CN.json
109
103
  var zh_CN_default = {
110
104
  "agent.err.createSession": "\u521B\u5EFA\u4F1A\u8BDD\u5931\u8D25",
111
105
  "agent.err.httpClient": "\u65E0\u6CD5\u8BBF\u95EE opencode HTTP client",
@@ -126,9 +120,12 @@ var zh_CN_default = {
126
120
  "index.error.pairTimeout": "\u7B49\u5F85\u914D\u5BF9\u7801\u8D85\u65F6\uFF08\u4E2D\u7EE7\u672A\u54CD\u5E94\uFF09",
127
121
  "index.log.claimed": "\u5DF2\u7ED1\u5B9A\u5230\u624B\u673A\u8D26\u53F7\uFF0C\u4E4B\u540E\u624B\u673A\u4ECE\u300C\u6211\u7684\u7535\u8111\u300D\u76F4\u63A5\u8FDE\u63A5\uFF0C\u65E0\u9700\u518D\u626B\u7801",
128
122
  "index.log.connectedRelay": "\u5DF2\u8FDE\u63A5\u4E2D\u7EE7 {url}",
123
+ "index.log.loaded": "tunnelbox opencode \u63D2\u4EF6\u5DF2\u542F\u52A8\uFF08v{version}\uFF09",
129
124
  "index.log.disconnected": "\u4E0E\u4E2D\u7EE7\u65AD\u5F00\uFF0C\u6B63\u5728\u81EA\u52A8\u91CD\u8FDE\u2026",
130
125
  "index.log.exit": "\u5DF2\u9000\u51FA",
131
126
  "index.log.pairCode": "\u751F\u6210\u914D\u5BF9\u7801: {code}",
127
+ "index.log.pairingStillClaimed": "\u6B64\u914D\u5BF9\u7801\u4EC5\u4F9B\u540C\u8D26\u53F7\u7684\u65B0\u624B\u673A\u91CD\u65B0\u914D\u5BF9\uFF1B\u672C\u673A\u5DF2\u7ED1\u5B9A\uFF0C\u4ECD\u53EF\u4ECE\u624B\u673A\u300C\u6211\u7684\u7535\u8111\u300D\u76F4\u63A5\u8FDE\u63A5\u3002",
128
+ "index.log.pairingPreparing": "\u6B63\u5728\u8FDE\u63A5\u4E2D\u7EE7\u5E76\u751F\u6210\u914D\u5BF9\u7801\u2026",
132
129
  "index.log.permissionToPhone": "\u6743\u9650\u8BF7\u6C42 \u2192 \u624B\u673A\u5BA1\u6279 (id={id} tool={tool})",
133
130
  "index.log.permissionTuiFallback": "app \u79BB\u7EBF\uFF0C\u6743\u9650\u8BF7\u6C42\u7531 opencode TUI \u515C\u5E95 (id={id} tool={tool})",
134
131
  "index.log.relayError": "\u4E2D\u7EE7\u9519\u8BEF: {msg}",
@@ -265,8 +262,6 @@ var zh_CN_default = {
265
262
  "hermes.errToolStatus": "tunnelbox_status \u5931\u8D25: {err}",
266
263
  "hermes.cliUsage": "\u7528\u6CD5: /tunnelbox <pair|status>\n pair \u5411\u4E2D\u7EE7\u7533\u8BF7\u624B\u673A\u914D\u5BF9\u7801\u5E76\u6253\u5370\n status \u663E\u793A\u4E2D\u7EE7/\u7ED1\u5B9A/\u8FDE\u63A5\u72B6\u6001"
267
264
  };
268
-
269
- // ../core/locales/zh-TW.json
270
265
  var zh_TW_default = {
271
266
  "agent.err.createSession": "\u5EFA\u7ACB\u6703\u8A71\u5931\u6557",
272
267
  "agent.err.httpClient": "\u7121\u6CD5\u5B58\u53D6 opencode HTTP client",
@@ -287,9 +282,12 @@ var zh_TW_default = {
287
282
  "index.error.pairTimeout": "\u7B49\u5F85\u914D\u5C0D\u78BC\u903E\u6642\uFF08\u4E2D\u7E7C\u672A\u56DE\u61C9\uFF09",
288
283
  "index.log.claimed": "\u5DF2\u7D81\u5B9A\u5230\u624B\u6A5F\u5E33\u865F\uFF0C\u4E4B\u5F8C\u624B\u6A5F\u76F4\u63A5\u5F9E\u300C\u6211\u7684\u96FB\u8166\u300D\u9023\u63A5\uFF0C\u4E0D\u9700\u518D\u6383\u78BC",
289
284
  "index.log.connectedRelay": "\u5DF2\u9023\u63A5\u4E2D\u7E7C {url}",
285
+ "index.log.loaded": "tunnelbox opencode \u5916\u639B\u5DF2\u555F\u52D5\uFF08v{version}\uFF09",
290
286
  "index.log.disconnected": "\u8207\u4E2D\u7E7C\u65B7\u7DDA\uFF0C\u6B63\u5728\u81EA\u52D5\u91CD\u9023\u2026",
291
287
  "index.log.exit": "\u5DF2\u9000\u51FA",
292
288
  "index.log.pairCode": "\u7522\u751F\u914D\u5C0D\u78BC: {code}",
289
+ "index.log.pairingStillClaimed": "\u6B64\u914D\u5C0D\u78BC\u50C5\u4F9B\u540C\u5E33\u865F\u7684\u65B0\u624B\u6A5F\u91CD\u65B0\u914D\u5C0D\uFF1B\u672C\u6A5F\u5DF2\u7D81\u5B9A\uFF0C\u4ECD\u53EF\u5F9E\u624B\u6A5F\u300C\u6211\u7684\u96FB\u8166\u300D\u76F4\u63A5\u9023\u63A5\u3002",
290
+ "index.log.pairingPreparing": "\u6B63\u5728\u9023\u7DDA\u4E2D\u7E7C\u4E26\u7522\u751F\u914D\u5C0D\u78BC\u2026",
293
291
  "index.log.permissionToPhone": "\u6B0A\u9650\u8ACB\u6C42 \u2192 \u624B\u6A5F\u5BE9\u6279 (id={id} tool={tool})",
294
292
  "index.log.permissionTuiFallback": "app \u96E2\u7DDA\uFF0C\u6B0A\u9650\u8ACB\u6C42\u7531 opencode TUI \u4EE3\u7BA1 (id={id} tool={tool})",
295
293
  "index.log.relayError": "\u4E2D\u7E7C\u932F\u8AA4: {msg}",
@@ -426,8 +424,6 @@ var zh_TW_default = {
426
424
  "hermes.errToolStatus": "tunnelbox_status \u5931\u6557: {err}",
427
425
  "hermes.cliUsage": "\u7528\u6CD5: /tunnelbox <pair|status>\n pair \u5411\u4E2D\u7E7C\u7533\u8ACB\u624B\u6A5F\u914D\u5C0D\u78BC\u4E26\u5217\u5370\n status \u986F\u793A\u4E2D\u7E7C/\u7D81\u5B9A/\u9023\u7DDA\u72C0\u614B"
428
426
  };
429
-
430
- // ../core/locales/en-US.json
431
427
  var en_US_default = {
432
428
  "agent.err.createSession": "Failed to create session",
433
429
  "agent.err.httpClient": "Cannot access the opencode HTTP client",
@@ -448,9 +444,12 @@ var en_US_default = {
448
444
  "index.error.pairTimeout": "Timed out waiting for a pairing code (the relay did not respond)",
449
445
  "index.log.claimed": "Bound to your phone account. From now on the phone connects directly from My Computers; no need to scan again",
450
446
  "index.log.connectedRelay": "Connected to relay {url}",
447
+ "index.log.loaded": "tunnelbox opencode plugin started (v{version})",
451
448
  "index.log.disconnected": "Disconnected from relay, reconnecting automatically\u2026",
452
449
  "index.log.exit": "Exited",
453
450
  "index.log.pairCode": "Generated pairing code: {code}",
451
+ "index.log.pairingStillClaimed": "This pairing code is for re-pairing a new phone under the same account. This computer is already linked and stays reachable from \u201CMy Computers\u201D on your phone.",
452
+ "index.log.pairingPreparing": "Connecting to the relay and generating a pairing code\u2026",
454
453
  "index.log.permissionToPhone": "Permission request \u2192 phone approval (id={id} tool={tool})",
455
454
  "index.log.permissionTuiFallback": "App offline; permission request handled by the opencode TUI (id={id} tool={tool})",
456
455
  "index.log.relayError": "Relay error: {msg}",
@@ -587,8 +586,6 @@ var en_US_default = {
587
586
  "hermes.errToolStatus": "tunnelbox_status failed: {err}",
588
587
  "hermes.cliUsage": "Usage: /tunnelbox <pair|status>\n pair request and print a phone pairing code\n status show relay/binding/connection status"
589
588
  };
590
-
591
- // ../core/locales/ja-JP.json
592
589
  var ja_JP_default = {
593
590
  "agent.err.createSession": "\u30BB\u30C3\u30B7\u30E7\u30F3\u306E\u4F5C\u6210\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
594
591
  "agent.err.httpClient": "opencode HTTP client \u306B\u30A2\u30AF\u30BB\u30B9\u3067\u304D\u307E\u305B\u3093",
@@ -609,9 +606,12 @@ var ja_JP_default = {
609
606
  "index.error.pairTimeout": "\u30DA\u30A2\u30EA\u30F3\u30B0\u30B3\u30FC\u30C9\u306E\u53D6\u5F97\u304C\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u3057\u307E\u3057\u305F\uFF08\u30EA\u30EC\u30FC\u304C\u5FDC\u7B54\u3057\u307E\u305B\u3093\uFF09",
610
607
  "index.log.claimed": "\u30B9\u30DE\u30DB\u306E\u30A2\u30AB\u30A6\u30F3\u30C8\u306B\u7D10\u4ED8\u3051\u307E\u3057\u305F\u3002\u4EE5\u964D\u306F\u300C\u30DE\u30A4 PC\u300D\u304B\u3089\u76F4\u63A5\u63A5\u7D9A\u3055\u308C\u308B\u305F\u3081\u3001\u518D\u30B9\u30AD\u30E3\u30F3\u306F\u4E0D\u8981\u3067\u3059",
611
608
  "index.log.connectedRelay": "\u30EA\u30EC\u30FC\u306B\u63A5\u7D9A\u3057\u307E\u3057\u305F {url}",
609
+ "index.log.loaded": "tunnelbox opencode \u30D7\u30E9\u30B0\u30A4\u30F3\u3092\u8D77\u52D5\u3057\u307E\u3057\u305F\uFF08v{version}\uFF09",
612
610
  "index.log.disconnected": "\u30EA\u30EC\u30FC\u304B\u3089\u5207\u65AD\u3001\u81EA\u52D5\u7684\u306B\u518D\u63A5\u7D9A\u3057\u3066\u3044\u307E\u3059\u2026",
613
611
  "index.log.exit": "\u7D42\u4E86\u3057\u307E\u3057\u305F",
614
612
  "index.log.pairCode": "\u30DA\u30A2\u30EA\u30F3\u30B0\u30B3\u30FC\u30C9\u3092\u751F\u6210: {code}",
613
+ "index.log.pairingStillClaimed": "\u3053\u306E\u30DA\u30A2\u30EA\u30F3\u30B0\u30B3\u30FC\u30C9\u306F\u540C\u4E00\u30A2\u30AB\u30A6\u30F3\u30C8\u306E\u65B0\u3057\u3044\u30B9\u30DE\u30FC\u30C8\u30D5\u30A9\u30F3\u3068\u306E\u518D\u30DA\u30A2\u30EA\u30F3\u30B0\u5C02\u7528\u3067\u3059\u3002\u3053\u306E PC \u306F\u65E2\u306B\u9023\u643A\u6E08\u307F\u3067\u3001\u30B9\u30DE\u30FC\u30C8\u30D5\u30A9\u30F3\u306E\u300C\u30DE\u30A4 \u30B3\u30F3\u30D4\u30E5\u30FC\u30BF\u30FC\u300D\u304B\u3089\u5F15\u304D\u7D9A\u304D\u63A5\u7D9A\u3067\u304D\u307E\u3059\u3002",
614
+ "index.log.pairingPreparing": "\u30EA\u30EC\u30FC\u3078\u63A5\u7D9A\u3057\u3066\u30DA\u30A2\u30EA\u30F3\u30B0\u30B3\u30FC\u30C9\u3092\u751F\u6210\u3057\u3066\u3044\u307E\u3059\u2026",
615
615
  "index.log.permissionToPhone": "\u6A29\u9650\u30EA\u30AF\u30A8\u30B9\u30C8 \u2192 \u30B9\u30DE\u30DB\u3067\u627F\u8A8D (id={id} tool={tool})",
616
616
  "index.log.permissionTuiFallback": "App \u304C\u30AA\u30D5\u30E9\u30A4\u30F3\u306E\u305F\u3081\u3001\u6A29\u9650\u30EA\u30AF\u30A8\u30B9\u30C8\u306F opencode TUI \u3067\u5BFE\u5FDC (id={id} tool={tool})",
617
617
  "index.log.relayError": "\u30EA\u30EC\u30FC\u30A8\u30E9\u30FC: {msg}",
@@ -748,8 +748,6 @@ var ja_JP_default = {
748
748
  "hermes.errToolStatus": "tunnelbox_status \u5931\u6557: {err}",
749
749
  "hermes.cliUsage": "\u4F7F\u7528\u65B9\u6CD5: /tunnelbox <pair|status>\n pair \u30DA\u30A2\u30EA\u30F3\u30B0\u30B3\u30FC\u30C9\u3092\u53D6\u5F97\u3057\u3066\u8868\u793A\n status \u30EA\u30EC\u30FC/\u30D0\u30A4\u30F3\u30C9/\u63A5\u7D9A\u72B6\u614B\u3092\u8868\u793A"
750
750
  };
751
-
752
- // ../core/locales/ko-KR.json
753
751
  var ko_KR_default = {
754
752
  "agent.err.createSession": "\uC138\uC158 \uC0DD\uC131 \uC2E4\uD328",
755
753
  "agent.err.httpClient": "opencode HTTP client\uC5D0 \uC811\uADFC\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4",
@@ -770,9 +768,12 @@ var ko_KR_default = {
770
768
  "index.error.pairTimeout": "\uD398\uC5B4\uB9C1 \uCF54\uB4DC \uB300\uAE30 \uC2DC\uAC04 \uCD08\uACFC(\uB9B4\uB808\uC774\uAC00 \uC751\uB2F5\uD558\uC9C0 \uC54A\uC74C)",
771
769
  "index.log.claimed": "\uD734\uB300\uD3F0 \uACC4\uC815\uC5D0 \uC5F0\uACB0\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uC774\uC81C \uD734\uB300\uD3F0\uC740 \u300C\uB0B4 PC\u300D\uC5D0\uC11C \uC9C1\uC811 \uC5F0\uACB0\uD558\uBA70 \uB2E4\uC2DC \uC2A4\uCE94\uD560 \uD544\uC694\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4",
772
770
  "index.log.connectedRelay": "\uB9B4\uB808\uC774\uC5D0 \uC5F0\uACB0\uB428 {url}",
771
+ "index.log.loaded": "tunnelbox opencode \uD50C\uB7EC\uADF8\uC778\uC744 \uC2DC\uC791\uD588\uC2B5\uB2C8\uB2E4\uFF08v{version}\uFF09",
773
772
  "index.log.disconnected": "\uB9B4\uB808\uC774 \uC5F0\uACB0\uC774 \uB04A\uACA8 \uC790\uB3D9\uC73C\uB85C \uC7AC\uC5F0\uACB0 \uC911\u2026",
774
773
  "index.log.exit": "\uC885\uB8CC\uB428",
775
774
  "index.log.pairCode": "\uD398\uC5B4\uB9C1 \uCF54\uB4DC \uC0DD\uC131: {code}",
775
+ "index.log.pairingStillClaimed": "\uC774 \uD398\uC5B4\uB9C1 \uCF54\uB4DC\uB294 \uAC19\uC740 \uACC4\uC815\uC758 \uC0C8 \uD734\uB300\uD3F0 \uC7AC\uC5F0\uACB0 \uC804\uC6A9\uC785\uB2C8\uB2E4. \uC774 PC\uB294 \uC774\uBBF8 \uC5F0\uACB0\uB418\uC5B4 \uD734\uB300\uD3F0\uC758 '\uB0B4 \uCEF4\uD4E8\uD130'\uC5D0\uC11C \uACC4\uC18D \uC811\uC18D\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",
776
+ "index.log.pairingPreparing": "\uB9B4\uB808\uC774\uC5D0 \uC5F0\uACB0\uD558\uC5EC \uD398\uC5B4\uB9C1 \uCF54\uB4DC\uB97C \uC0DD\uC131\uD558\uB294 \uC911\uC785\uB2C8\uB2E4\u2026",
776
777
  "index.log.permissionToPhone": "\uAD8C\uD55C \uC694\uCCAD \u2192 \uD734\uB300\uD3F0 \uC2B9\uC778 (id={id} tool={tool})",
777
778
  "index.log.permissionTuiFallback": "\uC571 \uC624\uD504\uB77C\uC778, \uAD8C\uD55C \uC694\uCCAD\uC740 opencode TUI\uAC00 \uCC98\uB9AC (id={id} tool={tool})",
778
779
  "index.log.relayError": "\uB9B4\uB808\uC774 \uC624\uB958: {msg}",
@@ -909,8 +910,6 @@ var ko_KR_default = {
909
910
  "hermes.errToolStatus": "tunnelbox_status \uC2E4\uD328: {err}",
910
911
  "hermes.cliUsage": "\uC0AC\uC6A9\uBC95: /tunnelbox <pair|status>\n pair \uD734\uB300\uD3F0 \uD398\uC5B4\uB9C1 \uCF54\uB4DC \uC694\uCCAD/\uCD9C\uB825\n status \uB9B4\uB808\uC774/\uBC14\uC778\uB529/\uC5F0\uACB0 \uC0C1\uD0DC \uD45C\uC2DC"
911
912
  };
912
-
913
- // ../core/locales/fr-FR.json
914
913
  var fr_FR_default = {
915
914
  "agent.err.createSession": "\xC9chec de la cr\xE9ation de la session",
916
915
  "agent.err.httpClient": "Impossible d'acc\xE9der au client HTTP d'opencode",
@@ -931,9 +930,12 @@ var fr_FR_default = {
931
930
  "index.error.pairTimeout": "D\xE9lai d'attente du code d'appairage d\xE9pass\xE9 (le relais ne r\xE9pond pas)",
932
931
  "index.log.claimed": "Li\xE9 \xE0 votre compte t\xE9l\xE9phone. Le t\xE9l\xE9phone se connecte d\xE9sormais directement depuis \xAB Mes PC \xBB ; plus besoin de scanner",
933
932
  "index.log.connectedRelay": "Connect\xE9 au relais {url}",
933
+ "index.log.loaded": "Plugin tunnelbox opencode d\xE9marr\xE9 (v{version})",
934
934
  "index.log.disconnected": "D\xE9connect\xE9 du relais, reconnexion automatique\u2026",
935
935
  "index.log.exit": "Arr\xEAt\xE9",
936
936
  "index.log.pairCode": "Code d'appairage g\xE9n\xE9r\xE9 : {code}",
937
+ "index.log.pairingStillClaimed": "Ce code d'appairage sert uniquement \xE0 r\xE9-appairer un nouveau t\xE9l\xE9phone du m\xEAme compte ; cet ordinateur est d\xE9j\xE0 li\xE9 et reste accessible depuis \xAB Mes ordinateurs \xBB sur votre t\xE9l\xE9phone.",
938
+ "index.log.pairingPreparing": "Connexion au relais et g\xE9n\xE9ration du code d'appairage\u2026",
937
939
  "index.log.permissionToPhone": "Demande d'autorisation \u2192 approbation sur t\xE9l\xE9phone (id={id} tool={tool})",
938
940
  "index.log.permissionTuiFallback": "App hors ligne ; la demande est g\xE9r\xE9e par le TUI opencode (id={id} tool={tool})",
939
941
  "index.log.relayError": "Erreur du relais : {msg}",
@@ -1070,8 +1072,6 @@ var fr_FR_default = {
1070
1072
  "hermes.errToolStatus": "\xE9chec de tunnelbox_status : {err}",
1071
1073
  "hermes.cliUsage": "Utilisation : /tunnelbox <pair|status>\n pair demander et afficher un code d'appairage\n status afficher l'\xE9tat relais/liaison/connexion"
1072
1074
  };
1073
-
1074
- // ../core/locales/de-DE.json
1075
1075
  var de_DE_default = {
1076
1076
  "agent.err.createSession": "Sitzung konnte nicht erstellt werden",
1077
1077
  "agent.err.httpClient": "Auf den opencode-HTTP-Client kann nicht zugegriffen werden",
@@ -1092,9 +1092,12 @@ var de_DE_default = {
1092
1092
  "index.error.pairTimeout": "Zeit\xFCberschreitung beim Warten auf einen Pairing-Code (Relay antwortet nicht)",
1093
1093
  "index.log.claimed": "An Ihr Telefonkonto gebunden. Das Telefon verbindet sich nun direkt \xFCber \u201CMeine PCs\u201D; kein erneutes Scannen n\xF6tig",
1094
1094
  "index.log.connectedRelay": "Mit Relay verbunden {url}",
1095
+ "index.log.loaded": "tunnelbox-opencode-Plugin gestartet (v{version})",
1095
1096
  "index.log.disconnected": "Vom Relay getrennt, verbinde automatisch neu\u2026",
1096
1097
  "index.log.exit": "Beendet",
1097
1098
  "index.log.pairCode": "Pairing-Code erzeugt: {code}",
1099
+ "index.log.pairingStillClaimed": "Dieser Pairing-Code dient nur zum erneuten Pairing eines neuen Telefons im selben Konto. Dieser Computer ist bereits verkn\xFCpft und bleibt \xFCber \u201EMeine Computer\u201C auf Ihrem Telefon erreichbar.",
1100
+ "index.log.pairingPreparing": "Verbindung zum Relay wird hergestellt und Pairing-Code generiert\u2026",
1098
1101
  "index.log.permissionToPhone": "Berechtigungsanfrage \u2192 Genehmigung am Telefon (id={id} tool={tool})",
1099
1102
  "index.log.permissionTuiFallback": "App offline; Berechtigungsanfrage wird vom opencode-TUI \xFCbernommen (id={id} tool={tool})",
1100
1103
  "index.log.relayError": "Relay-Fehler: {msg}",
@@ -1231,8 +1234,6 @@ var de_DE_default = {
1231
1234
  "hermes.errToolStatus": "tunnelbox_status fehlgeschlagen: {err}",
1232
1235
  "hermes.cliUsage": "Verwendung: /tunnelbox <pair|status>\n pair Pairing-Code anfordern und anzeigen\n status Relay/Bindung/Verbindung anzeigen"
1233
1236
  };
1234
-
1235
- // ../core/locales/es-ES.json
1236
1237
  var es_ES_default = {
1237
1238
  "agent.err.createSession": "No se pudo crear la sesi\xF3n",
1238
1239
  "agent.err.httpClient": "No se puede acceder al cliente HTTP de opencode",
@@ -1253,9 +1254,12 @@ var es_ES_default = {
1253
1254
  "index.error.pairTimeout": "Tiempo de espera agotado al obtener el c\xF3digo de emparejamiento (el relay no responde)",
1254
1255
  "index.log.claimed": "Vinculado a su cuenta de tel\xE9fono. El tel\xE9fono se conecta ahora directamente desde \xABMis PC\xBB; no hace falta volver a escanear",
1255
1256
  "index.log.connectedRelay": "Conectado al relay {url}",
1257
+ "index.log.loaded": "Plugin tunnelbox opencode iniciado (v{version})",
1256
1258
  "index.log.disconnected": "Desconectado del relay, reconectando autom\xE1ticamente\u2026",
1257
1259
  "index.log.exit": "Salido",
1258
1260
  "index.log.pairCode": "C\xF3digo de emparejamiento generado: {code}",
1261
+ "index.log.pairingStillClaimed": "Este c\xF3digo de emparejamiento es solo para volver a emparejar un tel\xE9fono nuevo con la misma cuenta; este equipo ya est\xE1 vinculado y sigue accesible desde \xABMis computadoras\xBB en el tel\xE9fono.",
1262
+ "index.log.pairingPreparing": "Conectando al relay y generando el c\xF3digo de emparejamiento\u2026",
1259
1263
  "index.log.permissionToPhone": "Solicitud de permiso \u2192 aprobaci\xF3n en el tel\xE9fono (id={id} tool={tool})",
1260
1264
  "index.log.permissionTuiFallback": "App sin conexi\xF3n; la solicitud la gestiona el TUI de opencode (id={id} tool={tool})",
1261
1265
  "index.log.relayError": "Error del relay: {msg}",
@@ -1392,8 +1396,6 @@ var es_ES_default = {
1392
1396
  "hermes.errToolStatus": "fallo de tunnelbox_status: {err}",
1393
1397
  "hermes.cliUsage": "Uso: /tunnelbox <pair|status>\n pair solicitar e imprimir un c\xF3digo de emparejamiento\n status mostrar estado de rel\xE9/enlace/conexi\xF3n"
1394
1398
  };
1395
-
1396
- // ../core/src/i18n.ts
1397
1399
  var DEFAULT_LANG = "en-US";
1398
1400
  var dicts = {
1399
1401
  "zh-CN": zh_CN_default,
@@ -1448,8 +1450,6 @@ function t(lang, key, vars) {
1448
1450
  }
1449
1451
  return text;
1450
1452
  }
1451
-
1452
- // ../core/src/state.ts
1453
1453
  function baseName() {
1454
1454
  return join(homedir(), ".tunnelbox");
1455
1455
  }
@@ -1512,13 +1512,9 @@ function writePairingJson(info, type) {
1512
1512
  }
1513
1513
  return p;
1514
1514
  }
1515
-
1516
- // ../core/src/env.ts
1517
1515
  function injectedRelayUrl() {
1518
1516
  return "wss://relay.tunnelbox.top" ? "wss://relay.tunnelbox.top".replace(/\/+$/, "") : "";
1519
1517
  }
1520
-
1521
- // ../core/src/qr.ts
1522
1518
  function dispWidth(s) {
1523
1519
  let w = 0;
1524
1520
  for (const ch of s) w += ch.charCodeAt(0) > 255 ? 2 : 1;
@@ -1565,6 +1561,102 @@ async function printPairing(code, type, name, lang) {
1565
1561
  console.log(" " + tt("qr.fileWritten", { path: file }));
1566
1562
  console.log("");
1567
1563
  }
1564
+ var DEFAULT_PAGE_SIZE = 50;
1565
+ var MAX_PART_TEXT = 16e3;
1566
+ var MAX_PART_ARGS = 4e3;
1567
+ var MAX_PAGE_BYTES = 15e5;
1568
+ function capStr(s, max) {
1569
+ if (s.length <= max) return s;
1570
+ return `${s.slice(0, max)}\u2026`;
1571
+ }
1572
+ function capMessage(m) {
1573
+ let parts;
1574
+ for (let i = 0; i < m.parts.length; i++) {
1575
+ const p = m.parts[i];
1576
+ const nText = typeof p.text === "string" && p.text.length > MAX_PART_TEXT ? capStr(p.text, MAX_PART_TEXT) : p.text;
1577
+ const nDelta = typeof p.delta === "string" && p.delta.length > MAX_PART_TEXT ? capStr(p.delta, MAX_PART_TEXT) : p.delta;
1578
+ const nArgs = typeof p.args === "string" && p.args.length > MAX_PART_ARGS ? capStr(p.args, MAX_PART_ARGS) : p.args;
1579
+ if (nText !== p.text || nDelta !== p.delta || nArgs !== p.args) {
1580
+ if (!parts) parts = m.parts.slice(0, i);
1581
+ parts.push({ ...p, text: nText, delta: nDelta, args: nArgs });
1582
+ } else if (parts) {
1583
+ parts.push(p);
1584
+ }
1585
+ }
1586
+ return parts ? { ...m, parts } : m;
1587
+ }
1588
+ function capMessages(messages) {
1589
+ let changed = false;
1590
+ const out = messages.map((m) => {
1591
+ const c = capMessage(m);
1592
+ if (c !== m) changed = true;
1593
+ return c;
1594
+ });
1595
+ return changed ? out : messages;
1596
+ }
1597
+ function byteLength(messages) {
1598
+ try {
1599
+ return JSON.stringify(messages).length;
1600
+ } catch {
1601
+ return messages.length * MAX_PART_TEXT * 2;
1602
+ }
1603
+ }
1604
+ function sliceWindow(full, query = {}) {
1605
+ const limit = Math.max(1, query.limit ?? DEFAULT_PAGE_SIZE);
1606
+ const maxBytes = query.maxBytes ?? MAX_PAGE_BYTES;
1607
+ let end = full.length;
1608
+ if (query.before !== void 0 && query.before !== "") {
1609
+ const idx = full.findIndex((m) => m.id === query.before);
1610
+ if (idx >= 0) end = idx;
1611
+ }
1612
+ let start2 = Math.max(0, end - limit);
1613
+ let messages = full.slice(start2, end);
1614
+ while (messages.length > 1) {
1615
+ const capped = capMessages(messages);
1616
+ if (byteLength(capped) <= maxBytes) {
1617
+ messages = capped;
1618
+ break;
1619
+ }
1620
+ start2++;
1621
+ messages = full.slice(start2, end);
1622
+ }
1623
+ return { messages: capMessages(messages), hasMore: start2 > 0 };
1624
+ }
1625
+ var MessagesCache = class {
1626
+ ttlMs;
1627
+ maxEntries;
1628
+ store = /* @__PURE__ */ new Map();
1629
+ constructor(ttlMs = 2e3, maxEntries = 64) {
1630
+ this.ttlMs = ttlMs;
1631
+ this.maxEntries = maxEntries;
1632
+ }
1633
+ /** 命中且未过 TTL 时返回完整列表副本;否则 undefined。 */
1634
+ get(sessionID, now = Date.now()) {
1635
+ const e = this.store.get(sessionID);
1636
+ if (!e) return void 0;
1637
+ if (now - e.at > this.ttlMs) {
1638
+ this.store.delete(sessionID);
1639
+ return void 0;
1640
+ }
1641
+ return e.full;
1642
+ }
1643
+ put(sessionID, full) {
1644
+ if (this.store.size >= this.maxEntries && !this.store.has(sessionID)) {
1645
+ const oldest = this.store.keys().next().value;
1646
+ if (oldest !== void 0) this.store.delete(oldest);
1647
+ }
1648
+ this.store.set(sessionID, { full, at: Date.now() });
1649
+ }
1650
+ /** 会话内容变化(流式部件/状态/删除等)时调用,立即失效快照。 */
1651
+ invalidate(sessionID) {
1652
+ this.store.delete(sessionID);
1653
+ }
1654
+ /** 适配器重连/整体失效(如清除全部快照)。 */
1655
+ clear() {
1656
+ this.store.clear();
1657
+ }
1658
+ };
1659
+ var messagesCache = new MessagesCache();
1568
1660
 
1569
1661
  // src/runner.ts
1570
1662
  import { spawn } from "node:child_process";
@@ -1917,7 +2009,7 @@ async function removeSession(sessionID) {
1917
2009
  }
1918
2010
 
1919
2011
  // src/bridge.ts
1920
- var VERSION = "0.1.0";
2012
+ var VERSION = true ? "0.1.8" : "0.0.0-dev";
1921
2013
  var AGENT_TYPE = "cursor";
1922
2014
  var ADAPTER_COMMANDS = [
1923
2015
  { name: "new", description: "\u65B0\u5EFA\u4F1A\u8BDD" },
@@ -2080,9 +2172,9 @@ var CursorBridge = class {
2080
2172
  });
2081
2173
  }
2082
2174
  async sessionMessages(env) {
2083
- const { sessionID } = env.payload;
2175
+ const { sessionID, before, limit } = env.payload;
2084
2176
  const messages = exists(sessionID) ? await readHistory(sessionID) : [];
2085
- this.reply(env, "messages", { sessionID, messages });
2177
+ this.reply(env, "messages", { sessionID, ...sliceWindow(messages, { before, limit }) });
2086
2178
  }
2087
2179
  async sessionPrompt(env) {
2088
2180
  const payload = env.payload;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tunnelbox/cursor",
3
- "version": "0.1.6",
3
+ "version": "0.1.8",
4
4
  "description": "tunnelbox 的 Cursor 适配器(C 类/B2 头less):手机远程驱动本机 Cursor CLI(agent -p stream-json,会话/流式/中止/删除)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.mjs",
@@ -31,7 +31,7 @@
31
31
  "qrcode": "^1.5.3"
32
32
  },
33
33
  "devDependencies": {
34
- "@tunnelbox/core": "0.1.0",
34
+ "@tunnelbox/core": "0.1.8",
35
35
  "@types/node": "^22.0.0",
36
36
  "@types/qrcode": "^1.5.5",
37
37
  "esbuild": "^0.24.0",