tmex-cli 0.13.0 → 0.14.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.
- package/CHANGELOG.md +16 -10
- package/dist/cli-node.js +492 -87
- package/dist/runtime/server.js +275 -32
- package/package.json +1 -1
- package/resources/fe-dist/assets/{DevicePage-Cj9jwadE.js → DevicePage-Ctq31eWb.js} +1 -1
- package/resources/fe-dist/assets/DevicesPage-DGo44NW0.js +1 -0
- package/resources/fe-dist/assets/{FilePage-CbHZVJbn.js → FilePage-BpubOqjN.js} +1 -1
- package/resources/fe-dist/assets/{SettingsPage-CCV0NSQF.js → SettingsPage-QT6fy6XA.js} +1 -1
- package/resources/fe-dist/assets/{agent-tab-DPwxh08T.js → agent-tab-A2FeMPwL.js} +1 -1
- package/resources/fe-dist/assets/{api-DlcFE5in.js → api-CGfOwFKm.js} +1 -1
- package/resources/fe-dist/assets/{arc-Bzmm6y8F.js → arc-B2dphCVi.js} +1 -1
- package/resources/fe-dist/assets/{architectureDiagram-3BPJPVTR-BdsN6XRe.js → architectureDiagram-3BPJPVTR-BpvEhd8M.js} +1 -1
- package/resources/fe-dist/assets/{blockDiagram-GPEHLZMM-CXdQhkqo.js → blockDiagram-GPEHLZMM-CI_NnIJz.js} +1 -1
- package/resources/fe-dist/assets/{c4Diagram-AAUBKEIU-CE_W2_pV.js → c4Diagram-AAUBKEIU-Y6RrOc7Y.js} +1 -1
- package/resources/fe-dist/assets/{card-B_sl9KIo.js → card-CydUB3N3.js} +1 -1
- package/resources/fe-dist/assets/channel-Ce3VMo9B.js +1 -0
- package/resources/fe-dist/assets/{chunk-2J33WTMH-BAdEIJQO.js → chunk-2J33WTMH-BQN_fYaa.js} +1 -1
- package/resources/fe-dist/assets/{chunk-4BX2VUAB-BZ0yj21c.js → chunk-4BX2VUAB-BExarxjk.js} +1 -1
- package/resources/fe-dist/assets/{chunk-55IACEB6-BknLtkSo.js → chunk-55IACEB6-DeOEgcn_.js} +1 -1
- package/resources/fe-dist/assets/{chunk-727SXJPM-CxVON9n5.js → chunk-727SXJPM-CwkxCtPA.js} +1 -1
- package/resources/fe-dist/assets/{chunk-AQP2D5EJ-CLqOK2pR.js → chunk-AQP2D5EJ-_IoTtvOb.js} +1 -1
- package/resources/fe-dist/assets/{chunk-FMBD7UC4-Dt5Vot-R.js → chunk-FMBD7UC4-6pvmQ3Lj.js} +1 -1
- package/resources/fe-dist/assets/{chunk-ND2GUHAM-t9HYlb8C.js → chunk-ND2GUHAM-CxpGf5zM.js} +1 -1
- package/resources/fe-dist/assets/{chunk-QZHKN3VN-DZReNtLB.js → chunk-QZHKN3VN-DOMH0v_e.js} +1 -1
- package/resources/fe-dist/assets/classDiagram-4FO5ZUOK-BjK-bnh-.js +1 -0
- package/resources/fe-dist/assets/classDiagram-v2-Q7XG4LA2-BjK-bnh-.js +1 -0
- package/resources/fe-dist/assets/{copy-Z9Fsj1r-.js → copy-DnlW35bA.js} +1 -1
- package/resources/fe-dist/assets/{cose-bilkent-S5V4N54A-BCTtGF2n.js → cose-bilkent-S5V4N54A-D03NElzH.js} +1 -1
- package/resources/fe-dist/assets/{dagre-BM42HDAG-BQ48EqSj.js → dagre-BM42HDAG-CVOxLhKQ.js} +1 -1
- package/resources/fe-dist/assets/{diagram-2AECGRRQ-BXjt2moR.js → diagram-2AECGRRQ-p564GAo-.js} +1 -1
- package/resources/fe-dist/assets/{diagram-5GNKFQAL-B2bvNTQO.js → diagram-5GNKFQAL-C_pgnQLt.js} +1 -1
- package/resources/fe-dist/assets/{diagram-KO2AKTUF-DLHWfbBH.js → diagram-KO2AKTUF-B36jioML.js} +1 -1
- package/resources/fe-dist/assets/{diagram-LMA3HP47-BCFT3Bur.js → diagram-LMA3HP47-B8P4WWeq.js} +1 -1
- package/resources/fe-dist/assets/{diagram-OG6HWLK6-bNZtxUJ2.js → diagram-OG6HWLK6-CTL4zJlz.js} +1 -1
- package/resources/fe-dist/assets/en_US-DRPd4vPi.js +1 -0
- package/resources/fe-dist/assets/{erDiagram-TEJ5UH35-KoAzrx4j.js → erDiagram-TEJ5UH35-DbKPL3Fa.js} +1 -1
- package/resources/fe-dist/assets/{files-tab-DdBDTjfs.js → files-tab-CeUM00x8.js} +1 -1
- package/resources/fe-dist/assets/{flowDiagram-I6XJVG4X-C6wGExWt.js → flowDiagram-I6XJVG4X-DvOU6wtN.js} +1 -1
- package/resources/fe-dist/assets/{ganttDiagram-6RSMTGT7-BIWybjes.js → ganttDiagram-6RSMTGT7-CwgNky8L.js} +1 -1
- package/resources/fe-dist/assets/{gitGraphDiagram-PVQCEYII-CD6tz24l.js → gitGraphDiagram-PVQCEYII-B3U-hNGe.js} +1 -1
- package/resources/fe-dist/assets/{index-CwH-l50P.js → index-DAElYydw.js} +59 -59
- package/resources/fe-dist/assets/{index-CUCrFB_J.js → index-DBHh6Xu1.js} +1 -1
- package/resources/fe-dist/assets/{infoDiagram-5YYISTIA-CrI-qlYw.js → infoDiagram-5YYISTIA-BmcWF7v1.js} +1 -1
- package/resources/fe-dist/assets/{ishikawaDiagram-YF4QCWOH-D9v5anxN.js → ishikawaDiagram-YF4QCWOH-Dr8C0MtS.js} +1 -1
- package/resources/fe-dist/assets/ja_JP-DHREHMZZ.js +1 -0
- package/resources/fe-dist/assets/{journeyDiagram-JHISSGLW-BH38CiJ0.js → journeyDiagram-JHISSGLW-DzlvXb4K.js} +1 -1
- package/resources/fe-dist/assets/{kanban-definition-UN3LZRKU-CKZ3_oXD.js → kanban-definition-UN3LZRKU-4aBWZlcm.js} +1 -1
- package/resources/fe-dist/assets/{linear-C_oE01xA.js → linear-_wXLepjd.js} +1 -1
- package/resources/fe-dist/assets/{markdown-preview-BtNbNwlP.js → markdown-preview-BX0o83rG.js} +3 -3
- package/resources/fe-dist/assets/{mermaid.core-4dbvlhht.js → mermaid.core-DoE3dx_X.js} +5 -5
- package/resources/fe-dist/assets/{mindmap-definition-RKZ34NQL-C5o4mnnX.js → mindmap-definition-RKZ34NQL-CKpq2s43.js} +1 -1
- package/resources/fe-dist/assets/{pieDiagram-4H26LBE5-2ss3HotB.js → pieDiagram-4H26LBE5-DlW1TLza.js} +1 -1
- package/resources/fe-dist/assets/{quadrantDiagram-W4KKPZXB-Bolcfx55.js → quadrantDiagram-W4KKPZXB-NEwxpMVe.js} +1 -1
- package/resources/fe-dist/assets/{requirementDiagram-4Y6WPE33-B-atSHRR.js → requirementDiagram-4Y6WPE33-CGysr6uH.js} +1 -1
- package/resources/fe-dist/assets/{sankeyDiagram-5OEKKPKP-ByynRcAV.js → sankeyDiagram-5OEKKPKP-j8yXOgys.js} +1 -1
- package/resources/fe-dist/assets/{send-D0P5wgcD.js → send-BtOPYsPT.js} +1 -1
- package/resources/fe-dist/assets/{sequenceDiagram-3UESZ5HK-CNC9IxV4.js → sequenceDiagram-3UESZ5HK-BRPWK9ZU.js} +1 -1
- package/resources/fe-dist/assets/{stateDiagram-AJRCARHV-CqzYDImp.js → stateDiagram-AJRCARHV-C8ckQlA7.js} +1 -1
- package/resources/fe-dist/assets/stateDiagram-v2-BHNVJYJU-Cm0vyyJy.js +1 -0
- package/resources/fe-dist/assets/{terminal-settings-panel-cjw9P_wY.js → terminal-settings-panel-ZnL_cBER.js} +1 -1
- package/resources/fe-dist/assets/{timeline-definition-PNZ67QCA-C38KIECs.js → timeline-definition-PNZ67QCA-BXMFPa99.js} +1 -1
- package/resources/fe-dist/assets/{transfer-toast-5tb-zYhi.js → transfer-toast-CUkPc73G.js} +1 -1
- package/resources/fe-dist/assets/{triangle-alert-CQzql6mY.js → triangle-alert-DyM9tU7d.js} +1 -1
- package/resources/fe-dist/assets/{vennDiagram-CIIHVFJN-BJudKfzJ.js → vennDiagram-CIIHVFJN-Bk8oPY9E.js} +1 -1
- package/resources/fe-dist/assets/{wardley-L42UT6IY-B6p_luMy.js → wardley-L42UT6IY-Bi_GTP2_.js} +1 -1
- package/resources/fe-dist/assets/{wardleyDiagram-YWT4CUSO-DZJeOiWQ.js → wardleyDiagram-YWT4CUSO-CaPDmxFM.js} +1 -1
- package/resources/fe-dist/assets/{xychartDiagram-2RQKCTM6-DOMCute2.js → xychartDiagram-2RQKCTM6-EHogasXy.js} +1 -1
- package/resources/fe-dist/assets/{zap-DWNtdoic.js → zap-CBgYyGBV.js} +1 -1
- package/resources/fe-dist/assets/zh_CN-DMEKXuFd.js +1 -0
- package/resources/fe-dist/index.html +1 -1
- package/resources/gateway-drizzle/0011_stormy_sauron.sql +1 -0
- package/resources/gateway-drizzle/meta/_journal.json +7 -0
- package/resources/fe-dist/assets/DevicesPage-BbypaGC7.js +0 -1
- package/resources/fe-dist/assets/channel-CuapxAWT.js +0 -1
- package/resources/fe-dist/assets/classDiagram-4FO5ZUOK-C0k136Ud.js +0 -1
- package/resources/fe-dist/assets/classDiagram-v2-Q7XG4LA2-C0k136Ud.js +0 -1
- package/resources/fe-dist/assets/en_US-B07wSHDj.js +0 -1
- package/resources/fe-dist/assets/ja_JP-DjF6Lrmx.js +0 -1
- package/resources/fe-dist/assets/stateDiagram-v2-BHNVJYJU-C3azxyWE.js +0 -1
- package/resources/fe-dist/assets/zh_CN-D10j4J8Y.js +0 -1
package/dist/runtime/server.js
CHANGED
|
@@ -22654,6 +22654,8 @@ var I18N_RESOURCES = {
|
|
|
22654
22654
|
session: "Tmux Session Name",
|
|
22655
22655
|
sessionPlaceholder: "tmex",
|
|
22656
22656
|
sessionHint: 'Leave empty to use default "tmex"',
|
|
22657
|
+
defaultWorkingDir: "Default Working Directory",
|
|
22658
|
+
defaultWorkingDirPlaceholder: "Leave empty for user home directory",
|
|
22657
22659
|
authMode: "Authentication Mode",
|
|
22658
22660
|
authPassword: "Password",
|
|
22659
22661
|
authKey: "Private Key",
|
|
@@ -22708,9 +22710,12 @@ var I18N_RESOURCES = {
|
|
|
22708
22710
|
noDeviceSelected: "No device selected",
|
|
22709
22711
|
windowClosed: "Current window has been closed, please select a window from the sidebar.",
|
|
22710
22712
|
paneClosed: "Current pane has been closed, please select a pane from the sidebar.",
|
|
22711
|
-
bellNotification: "Terminal Bell
|
|
22712
|
-
|
|
22713
|
+
bellNotification: "Terminal Bell",
|
|
22714
|
+
bellDescriptionWithTitle: "Window {{window}} \xB7 {{paneLabel}}",
|
|
22713
22715
|
bellFallback: "Received tmux bell",
|
|
22716
|
+
notificationFallbackTitle: "Terminal Notification",
|
|
22717
|
+
notificationSourceLabel: "From {{source}}",
|
|
22718
|
+
notificationFallbackDetail: "Terminal notification",
|
|
22714
22719
|
paneTitle: "Pane {{index}}",
|
|
22715
22720
|
activePane: "Current Pane",
|
|
22716
22721
|
activeWindow: "Current Window",
|
|
@@ -23645,6 +23650,8 @@ Time: {{time}}`,
|
|
|
23645
23650
|
session: "Tmux \u4F1A\u8BDD\u540D\u79F0",
|
|
23646
23651
|
sessionPlaceholder: "tmex",
|
|
23647
23652
|
sessionHint: '\u7559\u7A7A\u5C06\u4F7F\u7528\u9ED8\u8BA4\u503C "tmex"',
|
|
23653
|
+
defaultWorkingDir: "\u9ED8\u8BA4\u5DE5\u4F5C\u76EE\u5F55",
|
|
23654
|
+
defaultWorkingDirPlaceholder: "\u7559\u7A7A\u4F7F\u7528\u7528\u6237 home \u76EE\u5F55",
|
|
23648
23655
|
authMode: "\u8BA4\u8BC1\u65B9\u5F0F",
|
|
23649
23656
|
authPassword: "\u5BC6\u7801",
|
|
23650
23657
|
authKey: "\u79C1\u94A5",
|
|
@@ -23699,9 +23706,12 @@ Time: {{time}}`,
|
|
|
23699
23706
|
noDeviceSelected: "\u672A\u9009\u62E9\u8BBE\u5907",
|
|
23700
23707
|
windowClosed: "\u5F53\u524D\u7A97\u53E3\u5DF2\u5173\u95ED\uFF0C\u8BF7\u5728\u4FA7\u8FB9\u680F\u91CD\u65B0\u9009\u62E9\u7A97\u53E3\u3002",
|
|
23701
23708
|
paneClosed: "\u5F53\u524D Pane \u5DF2\u5173\u95ED\uFF0C\u8BF7\u5728\u4FA7\u8FB9\u680F\u91CD\u65B0\u9009\u62E9 Pane\u3002",
|
|
23702
|
-
bellNotification: "\u7EC8\u7AEF Bell
|
|
23703
|
-
|
|
23709
|
+
bellNotification: "\u7EC8\u7AEF Bell",
|
|
23710
|
+
bellDescriptionWithTitle: "\u7A97\u53E3 {{window}} \xB7 {{paneLabel}}",
|
|
23704
23711
|
bellFallback: "\u6536\u5230 tmux bell",
|
|
23712
|
+
notificationFallbackTitle: "\u7EC8\u7AEF\u901A\u77E5",
|
|
23713
|
+
notificationSourceLabel: "\u6765\u81EA {{source}}",
|
|
23714
|
+
notificationFallbackDetail: "\u7EC8\u7AEF\u901A\u77E5",
|
|
23705
23715
|
paneTitle: "Pane {{index}}",
|
|
23706
23716
|
activePane: "\u5F53\u524D pane",
|
|
23707
23717
|
activeWindow: "\u5F53\u524D\u7A97\u53E3",
|
|
@@ -24636,6 +24646,8 @@ Bot\uFF1A{{botName}}
|
|
|
24636
24646
|
session: "Tmux \u30BB\u30C3\u30B7\u30E7\u30F3\u540D",
|
|
24637
24647
|
sessionPlaceholder: "tmex",
|
|
24638
24648
|
sessionHint: "\u7A7A\u306E\u5834\u5408\u3001\u30C7\u30D5\u30A9\u30EB\u30C8\u306E\u300Ctmex\u300D\u304C\u4F7F\u7528\u3055\u308C\u307E\u3059",
|
|
24649
|
+
defaultWorkingDir: "\u30C7\u30D5\u30A9\u30EB\u30C8\u4F5C\u696D\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA",
|
|
24650
|
+
defaultWorkingDirPlaceholder: "\u7A7A\u306E\u5834\u5408\u3001\u30E6\u30FC\u30B6\u30FC\u306E\u30DB\u30FC\u30E0\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u4F7F\u7528",
|
|
24639
24651
|
authMode: "\u8A8D\u8A3C\u30E2\u30FC\u30C9",
|
|
24640
24652
|
authPassword: "\u30D1\u30B9\u30EF\u30FC\u30C9",
|
|
24641
24653
|
authKey: "\u79D8\u5BC6\u9375",
|
|
@@ -24690,9 +24702,12 @@ Bot\uFF1A{{botName}}
|
|
|
24690
24702
|
noDeviceSelected: "\u30C7\u30D0\u30A4\u30B9\u304C\u9078\u629E\u3055\u308C\u3066\u3044\u307E\u305B\u3093",
|
|
24691
24703
|
windowClosed: "\u73FE\u5728\u306E\u30A6\u30A3\u30F3\u30C9\u30A6\u306F\u9589\u3058\u3089\u308C\u307E\u3057\u305F\u3002\u30B5\u30A4\u30C9\u30D0\u30FC\u304B\u3089\u30A6\u30A3\u30F3\u30C9\u30A6\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
24692
24704
|
paneClosed: "\u73FE\u5728\u306E\u30DA\u30A4\u30F3\u306F\u9589\u3058\u3089\u308C\u307E\u3057\u305F\u3002\u30B5\u30A4\u30C9\u30D0\u30FC\u304B\u3089\u30DA\u30A4\u30F3\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
24693
|
-
bellNotification: "\u30BF\u30FC\u30DF\u30CA\u30EB\u30D9\u30EB
|
|
24694
|
-
|
|
24705
|
+
bellNotification: "\u30BF\u30FC\u30DF\u30CA\u30EB\u30D9\u30EB",
|
|
24706
|
+
bellDescriptionWithTitle: "\u30A6\u30A3\u30F3\u30C9\u30A6 {{window}} \xB7 {{paneLabel}}",
|
|
24695
24707
|
bellFallback: "tmux \u30D9\u30EB\u3092\u53D7\u4FE1",
|
|
24708
|
+
notificationFallbackTitle: "\u30BF\u30FC\u30DF\u30CA\u30EB\u901A\u77E5",
|
|
24709
|
+
notificationSourceLabel: "{{source}} \u304B\u3089",
|
|
24710
|
+
notificationFallbackDetail: "\u30BF\u30FC\u30DF\u30CA\u30EB\u901A\u77E5",
|
|
24696
24711
|
paneTitle: "\u30DA\u30A4\u30F3 {{index}}",
|
|
24697
24712
|
activePane: "\u73FE\u5728\u306E\u30DA\u30A4\u30F3",
|
|
24698
24713
|
activeWindow: "\u73FE\u5728\u306E\u30A6\u30A3\u30F3\u30C9\u30A6",
|
|
@@ -25627,6 +25642,7 @@ __export(exports_ws_borsh, {
|
|
|
25627
25642
|
KIND_DEVICE_DISCONNECT: () => KIND_DEVICE_DISCONNECT,
|
|
25628
25643
|
KIND_DEVICE_CONNECTED: () => KIND_DEVICE_CONNECTED,
|
|
25629
25644
|
KIND_DEVICE_CONNECT: () => KIND_DEVICE_CONNECT,
|
|
25645
|
+
KIND_CLIPBOARD_WRITE: () => KIND_CLIPBOARD_WRITE,
|
|
25630
25646
|
KIND_CHUNK: () => KIND_CHUNK,
|
|
25631
25647
|
KIND_AGENT_UNSUBSCRIBE: () => KIND_AGENT_UNSUBSCRIBE,
|
|
25632
25648
|
KIND_AGENT_SUBSCRIBE: () => KIND_AGENT_SUBSCRIBE,
|
|
@@ -25698,6 +25714,7 @@ var KIND_TERM_RESIZE = 771;
|
|
|
25698
25714
|
var KIND_TERM_SYNC_SIZE = 772;
|
|
25699
25715
|
var KIND_TERM_OUTPUT = 773;
|
|
25700
25716
|
var KIND_TERM_HISTORY = 774;
|
|
25717
|
+
var KIND_CLIPBOARD_WRITE = 775;
|
|
25701
25718
|
var KIND_SWITCH_ACK = 1025;
|
|
25702
25719
|
var KIND_LIVE_RESUME = 1026;
|
|
25703
25720
|
var KIND_CHUNK = 1281;
|
|
@@ -25734,6 +25751,7 @@ var VALID_KINDS = new Set([
|
|
|
25734
25751
|
KIND_TERM_SYNC_SIZE,
|
|
25735
25752
|
KIND_TERM_OUTPUT,
|
|
25736
25753
|
KIND_TERM_HISTORY,
|
|
25754
|
+
KIND_CLIPBOARD_WRITE,
|
|
25737
25755
|
KIND_SWITCH_ACK,
|
|
25738
25756
|
KIND_LIVE_RESUME,
|
|
25739
25757
|
KIND_CHUNK,
|
|
@@ -25775,6 +25793,7 @@ function kindToString(kind) {
|
|
|
25775
25793
|
[KIND_TERM_SYNC_SIZE]: "TERM_SYNC_SIZE",
|
|
25776
25794
|
[KIND_TERM_OUTPUT]: "TERM_OUTPUT",
|
|
25777
25795
|
[KIND_TERM_HISTORY]: "TERM_HISTORY",
|
|
25796
|
+
[KIND_CLIPBOARD_WRITE]: "CLIPBOARD_WRITE",
|
|
25778
25797
|
[KIND_SWITCH_ACK]: "SWITCH_ACK",
|
|
25779
25798
|
[KIND_LIVE_RESUME]: "LIVE_RESUME",
|
|
25780
25799
|
[KIND_CHUNK]: "CHUNK",
|
|
@@ -25892,6 +25911,7 @@ __export(exports_schema, {
|
|
|
25892
25911
|
DeviceDisconnectSchema: () => DeviceDisconnectSchema,
|
|
25893
25912
|
DeviceConnectedSchema: () => DeviceConnectedSchema,
|
|
25894
25913
|
DeviceConnectSchema: () => DeviceConnectSchema,
|
|
25914
|
+
ClipboardWriteSchema: () => ClipboardWriteSchema,
|
|
25895
25915
|
ChunkSchema: () => ChunkSchema,
|
|
25896
25916
|
BellEventSchema: () => BellEventSchema,
|
|
25897
25917
|
AgentUnsubscribeSchema: () => AgentUnsubscribeSchema,
|
|
@@ -26037,6 +26057,11 @@ var TermHistorySchema = import_zorsh.b.struct({
|
|
|
26037
26057
|
alternateScreen: import_zorsh.b.bool(),
|
|
26038
26058
|
data: import_zorsh.b.bytes()
|
|
26039
26059
|
});
|
|
26060
|
+
var ClipboardWriteSchema = import_zorsh.b.struct({
|
|
26061
|
+
deviceId: import_zorsh.b.string(),
|
|
26062
|
+
paneId: import_zorsh.b.string(),
|
|
26063
|
+
text: import_zorsh.b.string()
|
|
26064
|
+
});
|
|
26040
26065
|
var SwitchAckSchema = import_zorsh.b.struct({
|
|
26041
26066
|
deviceId: import_zorsh.b.string(),
|
|
26042
26067
|
windowId: import_zorsh.b.string(),
|
|
@@ -26141,7 +26166,9 @@ var BellEventSchema = import_zorsh.b.struct({
|
|
|
26141
26166
|
paneId: OptionStringSchema,
|
|
26142
26167
|
windowIndex: OptionU16Schema,
|
|
26143
26168
|
paneIndex: OptionU16Schema,
|
|
26144
|
-
paneUrl: OptionStringSchema
|
|
26169
|
+
paneUrl: OptionStringSchema,
|
|
26170
|
+
paneTitle: OptionStringSchema,
|
|
26171
|
+
paneCurrentCommand: OptionStringSchema
|
|
26145
26172
|
});
|
|
26146
26173
|
var NotificationEventSchema = import_zorsh.b.struct({
|
|
26147
26174
|
source: import_zorsh.b.u8(),
|
|
@@ -26151,7 +26178,9 @@ var NotificationEventSchema = import_zorsh.b.struct({
|
|
|
26151
26178
|
paneId: OptionStringSchema,
|
|
26152
26179
|
windowIndex: OptionU16Schema,
|
|
26153
26180
|
paneIndex: OptionU16Schema,
|
|
26154
|
-
paneUrl: OptionStringSchema
|
|
26181
|
+
paneUrl: OptionStringSchema,
|
|
26182
|
+
paneTitle: OptionStringSchema,
|
|
26183
|
+
paneCurrentCommand: OptionStringSchema
|
|
26155
26184
|
});
|
|
26156
26185
|
// ../shared/src/ws-borsh/codec.ts
|
|
26157
26186
|
var MAGIC = new Uint8Array([84, 88]);
|
|
@@ -26468,7 +26497,9 @@ function encodeEventData(type, data) {
|
|
|
26468
26497
|
paneId: d.paneId ?? null,
|
|
26469
26498
|
windowIndex: d.windowIndex ?? null,
|
|
26470
26499
|
paneIndex: d.paneIndex ?? null,
|
|
26471
|
-
paneUrl: d.paneUrl ?? null
|
|
26500
|
+
paneUrl: d.paneUrl ?? null,
|
|
26501
|
+
paneTitle: d.paneTitle ?? null,
|
|
26502
|
+
paneCurrentCommand: d.paneCurrentCommand ?? null
|
|
26472
26503
|
});
|
|
26473
26504
|
}
|
|
26474
26505
|
case "output":
|
|
@@ -26483,7 +26514,9 @@ function encodeEventData(type, data) {
|
|
|
26483
26514
|
paneId: d.paneId ?? null,
|
|
26484
26515
|
windowIndex: d.windowIndex ?? null,
|
|
26485
26516
|
paneIndex: d.paneIndex ?? null,
|
|
26486
|
-
paneUrl: d.paneUrl ?? null
|
|
26517
|
+
paneUrl: d.paneUrl ?? null,
|
|
26518
|
+
paneTitle: d.paneTitle ?? null,
|
|
26519
|
+
paneCurrentCommand: d.paneCurrentCommand ?? null
|
|
26487
26520
|
});
|
|
26488
26521
|
}
|
|
26489
26522
|
default:
|
|
@@ -26594,7 +26627,9 @@ function decodeEventData(type, data) {
|
|
|
26594
26627
|
paneId: bell.paneId ?? undefined,
|
|
26595
26628
|
windowIndex: bell.windowIndex ?? undefined,
|
|
26596
26629
|
paneIndex: bell.paneIndex ?? undefined,
|
|
26597
|
-
paneUrl: bell.paneUrl ?? undefined
|
|
26630
|
+
paneUrl: bell.paneUrl ?? undefined,
|
|
26631
|
+
paneTitle: bell.paneTitle ?? undefined,
|
|
26632
|
+
paneCurrentCommand: bell.paneCurrentCommand ?? undefined
|
|
26598
26633
|
};
|
|
26599
26634
|
}
|
|
26600
26635
|
case "notification": {
|
|
@@ -26607,7 +26642,9 @@ function decodeEventData(type, data) {
|
|
|
26607
26642
|
paneId: notification.paneId ?? undefined,
|
|
26608
26643
|
windowIndex: notification.windowIndex ?? undefined,
|
|
26609
26644
|
paneIndex: notification.paneIndex ?? undefined,
|
|
26610
|
-
paneUrl: notification.paneUrl ?? undefined
|
|
26645
|
+
paneUrl: notification.paneUrl ?? undefined,
|
|
26646
|
+
paneTitle: notification.paneTitle ?? undefined,
|
|
26647
|
+
paneCurrentCommand: notification.paneCurrentCommand ?? undefined
|
|
26611
26648
|
};
|
|
26612
26649
|
}
|
|
26613
26650
|
default:
|
|
@@ -33148,6 +33185,7 @@ var devices = sqliteTable("devices", {
|
|
|
33148
33185
|
passwordEnc: text("password_enc"),
|
|
33149
33186
|
privateKeyEnc: text("private_key_enc"),
|
|
33150
33187
|
privateKeyPassphraseEnc: text("private_key_passphrase_enc"),
|
|
33188
|
+
defaultWorkingDir: text("default_working_dir"),
|
|
33151
33189
|
sortOrder: integer("sort_order").notNull().default(0),
|
|
33152
33190
|
createdAt: text("created_at").notNull(),
|
|
33153
33191
|
updatedAt: text("updated_at").notNull()
|
|
@@ -33401,6 +33439,7 @@ function toDevice(row) {
|
|
|
33401
33439
|
passwordEnc: optional(row.passwordEnc),
|
|
33402
33440
|
privateKeyEnc: optional(row.privateKeyEnc),
|
|
33403
33441
|
privateKeyPassphraseEnc: optional(row.privateKeyPassphraseEnc),
|
|
33442
|
+
defaultWorkingDir: optional(row.defaultWorkingDir),
|
|
33404
33443
|
sortOrder: row.sortOrder,
|
|
33405
33444
|
createdAt: row.createdAt,
|
|
33406
33445
|
updatedAt: row.updatedAt
|
|
@@ -33528,6 +33567,7 @@ function createDevice(device) {
|
|
|
33528
33567
|
passwordEnc: device.passwordEnc ?? null,
|
|
33529
33568
|
privateKeyEnc: device.privateKeyEnc ?? null,
|
|
33530
33569
|
privateKeyPassphraseEnc: device.privateKeyPassphraseEnc ?? null,
|
|
33570
|
+
defaultWorkingDir: device.defaultWorkingDir ?? null,
|
|
33531
33571
|
sortOrder: nextSortOrder,
|
|
33532
33572
|
createdAt: device.createdAt,
|
|
33533
33573
|
updatedAt: device.updatedAt
|
|
@@ -33597,6 +33637,9 @@ function updateDevice(id, updates) {
|
|
|
33597
33637
|
if (updates.privateKeyPassphraseEnc !== undefined) {
|
|
33598
33638
|
setValues.privateKeyPassphraseEnc = updates.privateKeyPassphraseEnc;
|
|
33599
33639
|
}
|
|
33640
|
+
if (updates.defaultWorkingDir !== undefined) {
|
|
33641
|
+
setValues.defaultWorkingDir = updates.defaultWorkingDir || null;
|
|
33642
|
+
}
|
|
33600
33643
|
orm.update(devices).set(setValues).where(eq(devices.id, id)).run();
|
|
33601
33644
|
}
|
|
33602
33645
|
function deleteDevice(id) {
|
|
@@ -98249,6 +98292,28 @@ function createPaneStreamParser(options) {
|
|
|
98249
98292
|
options.onNotification({ source: "osc1337", body: "RequestAttention" });
|
|
98250
98293
|
}
|
|
98251
98294
|
return;
|
|
98295
|
+
case "52": {
|
|
98296
|
+
const separatorIndex = payload.indexOf(";");
|
|
98297
|
+
if (separatorIndex < 0) {
|
|
98298
|
+
return;
|
|
98299
|
+
}
|
|
98300
|
+
const base64Data = payload.slice(separatorIndex + 1);
|
|
98301
|
+
if (!base64Data || base64Data === "?") {
|
|
98302
|
+
return;
|
|
98303
|
+
}
|
|
98304
|
+
try {
|
|
98305
|
+
const binaryString = atob(base64Data);
|
|
98306
|
+
const bytes = new Uint8Array(binaryString.length);
|
|
98307
|
+
for (let i = 0;i < binaryString.length; i++) {
|
|
98308
|
+
bytes[i] = binaryString.charCodeAt(i);
|
|
98309
|
+
}
|
|
98310
|
+
const text3 = new TextDecoder("utf-8", { fatal: false }).decode(bytes);
|
|
98311
|
+
if (text3) {
|
|
98312
|
+
options.onClipboardWrite?.(text3);
|
|
98313
|
+
}
|
|
98314
|
+
} catch {}
|
|
98315
|
+
return;
|
|
98316
|
+
}
|
|
98252
98317
|
case "133": {
|
|
98253
98318
|
const parts = payload.split(";");
|
|
98254
98319
|
const kind = parts[0];
|
|
@@ -98388,7 +98453,7 @@ function createPaneStreamParser(options) {
|
|
|
98388
98453
|
}
|
|
98389
98454
|
if (phase === "osc-params") {
|
|
98390
98455
|
if (byte === 59) {
|
|
98391
|
-
phase = oscKind === "0" || oscKind === "1" || oscKind === "2" || oscKind === "9" || oscKind === "99" || oscKind === "133" || oscKind === "777" || oscKind === "1337" ? "osc-body" : "osc-body-ignore";
|
|
98456
|
+
phase = oscKind === "0" || oscKind === "1" || oscKind === "2" || oscKind === "9" || oscKind === "52" || oscKind === "99" || oscKind === "133" || oscKind === "777" || oscKind === "1337" ? "osc-body" : "osc-body-ignore";
|
|
98392
98457
|
return;
|
|
98393
98458
|
}
|
|
98394
98459
|
if (byte === 7) {
|
|
@@ -98516,7 +98581,8 @@ function createControlModeSubscription(callbacks) {
|
|
|
98516
98581
|
onTitle: (title) => callbacks.onTitle(paneId, title),
|
|
98517
98582
|
onBell: () => callbacks.onBell(paneId),
|
|
98518
98583
|
onNotification: (notification) => callbacks.onNotification(paneId, notification),
|
|
98519
|
-
onPromptMarker: (marker24) => callbacks.onPromptMarker?.(paneId, marker24)
|
|
98584
|
+
onPromptMarker: (marker24) => callbacks.onPromptMarker?.(paneId, marker24),
|
|
98585
|
+
onClipboardWrite: (text3) => callbacks.onClipboardWrite?.(paneId, text3)
|
|
98520
98586
|
});
|
|
98521
98587
|
paneParsers.set(paneId, parser2);
|
|
98522
98588
|
return parser2;
|
|
@@ -99019,7 +99085,10 @@ class LocalExternalTmuxConnection {
|
|
|
99019
99085
|
if (!this.connected) {
|
|
99020
99086
|
return;
|
|
99021
99087
|
}
|
|
99022
|
-
const argv =
|
|
99088
|
+
const argv = ["new-window", "-t", this.sessionName, "-c", this.resolveDefaultWorkingDir()];
|
|
99089
|
+
if (name24) {
|
|
99090
|
+
argv.push("-n", name24);
|
|
99091
|
+
}
|
|
99023
99092
|
this.runAndRefresh(argv).catch((error51) => {
|
|
99024
99093
|
this.callbacks.onError(error51);
|
|
99025
99094
|
});
|
|
@@ -99048,6 +99117,20 @@ class LocalExternalTmuxConnection {
|
|
|
99048
99117
|
this.callbacks.onError(error51);
|
|
99049
99118
|
});
|
|
99050
99119
|
}
|
|
99120
|
+
updateDefaultWorkingDir(dir2) {
|
|
99121
|
+
if (this.device) {
|
|
99122
|
+
this.device = { ...this.device, defaultWorkingDir: dir2 };
|
|
99123
|
+
}
|
|
99124
|
+
if (this.connected) {
|
|
99125
|
+
this.runTmuxAllowFailure([
|
|
99126
|
+
"set-option",
|
|
99127
|
+
"-t",
|
|
99128
|
+
this.sessionName,
|
|
99129
|
+
"default-path",
|
|
99130
|
+
this.resolveDefaultWorkingDir()
|
|
99131
|
+
]);
|
|
99132
|
+
}
|
|
99133
|
+
}
|
|
99051
99134
|
setWindowStyle(style) {
|
|
99052
99135
|
if (!this.connected) {
|
|
99053
99136
|
return;
|
|
@@ -99077,12 +99160,15 @@ class LocalExternalTmuxConnection {
|
|
|
99077
99160
|
const { stdout } = await this.runTmux(["display-message", "-p", "-t", paneId, PANE_META_FORMAT], "silent");
|
|
99078
99161
|
return parsePaneMeta(stdout);
|
|
99079
99162
|
}
|
|
99163
|
+
resolveDefaultWorkingDir() {
|
|
99164
|
+
return this.device?.defaultWorkingDir?.trim() || homedir();
|
|
99165
|
+
}
|
|
99080
99166
|
async ensureSession() {
|
|
99081
99167
|
const exists3 = await this.runTmuxAllowFailure(["has-session", "-t", this.sessionName]);
|
|
99082
99168
|
if (exists3.exitCode === 0) {
|
|
99083
99169
|
return;
|
|
99084
99170
|
}
|
|
99085
|
-
await this.runTmux(["new-session", "-d", "-c",
|
|
99171
|
+
await this.runTmux(["new-session", "-d", "-c", this.resolveDefaultWorkingDir(), "-s", this.sessionName]);
|
|
99086
99172
|
}
|
|
99087
99173
|
async configureSessionOptions() {
|
|
99088
99174
|
await this.runTmuxAllowFailure([
|
|
@@ -99136,6 +99222,13 @@ class LocalExternalTmuxConnection {
|
|
|
99136
99222
|
"COLORTERM",
|
|
99137
99223
|
"truecolor"
|
|
99138
99224
|
]);
|
|
99225
|
+
await this.runTmuxAllowFailure([
|
|
99226
|
+
"set-option",
|
|
99227
|
+
"-t",
|
|
99228
|
+
this.sessionName,
|
|
99229
|
+
"default-path",
|
|
99230
|
+
this.resolveDefaultWorkingDir()
|
|
99231
|
+
]);
|
|
99139
99232
|
await this.configureWindowStyle();
|
|
99140
99233
|
}
|
|
99141
99234
|
async configureWindowStyle(styleValue = config.tmuxWindowStyle) {
|
|
@@ -99254,6 +99347,9 @@ class LocalExternalTmuxConnection {
|
|
|
99254
99347
|
onPromptMarker: (paneId, marker24) => {
|
|
99255
99348
|
this.callbacks.onPromptMarker?.(paneId, marker24);
|
|
99256
99349
|
},
|
|
99350
|
+
onClipboardWrite: (paneId, text3) => {
|
|
99351
|
+
this.callbacks.onClipboardWrite?.(paneId, text3);
|
|
99352
|
+
},
|
|
99257
99353
|
onStructureChanged: () => {
|
|
99258
99354
|
this.requestSnapshot();
|
|
99259
99355
|
},
|
|
@@ -99397,7 +99493,7 @@ class LocalExternalTmuxConnection {
|
|
|
99397
99493
|
async closeWindowInternal(windowId) {
|
|
99398
99494
|
const count2 = Number.parseInt((await this.runTmux(["display-message", "-p", "-t", this.sessionName, "#{session_windows}"])).stdout.trim() || "0", 10);
|
|
99399
99495
|
if (count2 <= 1) {
|
|
99400
|
-
await this.runTmux(["new-window", "-d", "-t", this.sessionName]);
|
|
99496
|
+
await this.runTmux(["new-window", "-d", "-t", this.sessionName, "-c", this.resolveDefaultWorkingDir()]);
|
|
99401
99497
|
}
|
|
99402
99498
|
await this.runAndRefresh(["kill-window", "-t", windowId], true);
|
|
99403
99499
|
}
|
|
@@ -100221,7 +100317,10 @@ class SshExternalTmuxConnection {
|
|
|
100221
100317
|
if (!this.connected) {
|
|
100222
100318
|
return;
|
|
100223
100319
|
}
|
|
100224
|
-
const argv =
|
|
100320
|
+
const argv = ["new-window", "-t", this.sessionName, "-c", this.resolveDefaultWorkingDir()];
|
|
100321
|
+
if (name24) {
|
|
100322
|
+
argv.push("-n", name24);
|
|
100323
|
+
}
|
|
100225
100324
|
this.runAndRefresh(argv).catch((error51) => {
|
|
100226
100325
|
this.callbacks.onError(error51);
|
|
100227
100326
|
});
|
|
@@ -100250,6 +100349,20 @@ class SshExternalTmuxConnection {
|
|
|
100250
100349
|
this.callbacks.onError(error51);
|
|
100251
100350
|
});
|
|
100252
100351
|
}
|
|
100352
|
+
updateDefaultWorkingDir(dir2) {
|
|
100353
|
+
if (this.device) {
|
|
100354
|
+
this.device = { ...this.device, defaultWorkingDir: dir2 };
|
|
100355
|
+
}
|
|
100356
|
+
if (this.connected) {
|
|
100357
|
+
this.runTmuxAllowFailure([
|
|
100358
|
+
"set-option",
|
|
100359
|
+
"-t",
|
|
100360
|
+
this.sessionName,
|
|
100361
|
+
"default-path",
|
|
100362
|
+
this.resolveDefaultWorkingDir()
|
|
100363
|
+
]);
|
|
100364
|
+
}
|
|
100365
|
+
}
|
|
100253
100366
|
setWindowStyle(style) {
|
|
100254
100367
|
if (!this.connected) {
|
|
100255
100368
|
return;
|
|
@@ -100385,12 +100498,15 @@ class SshExternalTmuxConnection {
|
|
|
100385
100498
|
throw new Error(message);
|
|
100386
100499
|
}
|
|
100387
100500
|
}
|
|
100501
|
+
resolveDefaultWorkingDir() {
|
|
100502
|
+
return this.device?.defaultWorkingDir?.trim() || this.remoteHomeDir;
|
|
100503
|
+
}
|
|
100388
100504
|
async ensureSession() {
|
|
100389
100505
|
const exists3 = await this.runTmuxAllowFailure(["has-session", "-t", this.sessionName]);
|
|
100390
100506
|
if (exists3.exitCode === 0) {
|
|
100391
100507
|
return;
|
|
100392
100508
|
}
|
|
100393
|
-
await this.runTmux(["new-session", "-d", "-c", this.
|
|
100509
|
+
await this.runTmux(["new-session", "-d", "-c", this.resolveDefaultWorkingDir(), "-s", this.sessionName]);
|
|
100394
100510
|
}
|
|
100395
100511
|
async configureSessionOptions() {
|
|
100396
100512
|
await this.runTmuxAllowFailure([
|
|
@@ -100444,6 +100560,13 @@ class SshExternalTmuxConnection {
|
|
|
100444
100560
|
"COLORTERM",
|
|
100445
100561
|
"truecolor"
|
|
100446
100562
|
]);
|
|
100563
|
+
await this.runTmuxAllowFailure([
|
|
100564
|
+
"set-option",
|
|
100565
|
+
"-t",
|
|
100566
|
+
this.sessionName,
|
|
100567
|
+
"default-path",
|
|
100568
|
+
this.resolveDefaultWorkingDir()
|
|
100569
|
+
]);
|
|
100447
100570
|
await this.configureWindowStyle();
|
|
100448
100571
|
}
|
|
100449
100572
|
async configureWindowStyle(styleValue = config.tmuxWindowStyle) {
|
|
@@ -100558,6 +100681,9 @@ class SshExternalTmuxConnection {
|
|
|
100558
100681
|
onPromptMarker: (paneId, marker24) => {
|
|
100559
100682
|
this.callbacks.onPromptMarker?.(paneId, marker24);
|
|
100560
100683
|
},
|
|
100684
|
+
onClipboardWrite: (paneId, text3) => {
|
|
100685
|
+
this.callbacks.onClipboardWrite?.(paneId, text3);
|
|
100686
|
+
},
|
|
100561
100687
|
onStructureChanged: () => {
|
|
100562
100688
|
this.requestSnapshot();
|
|
100563
100689
|
},
|
|
@@ -100665,7 +100791,7 @@ class SshExternalTmuxConnection {
|
|
|
100665
100791
|
async closeWindowInternal(windowId) {
|
|
100666
100792
|
const count2 = Number.parseInt((await this.runTmux(["display-message", "-p", "-t", this.sessionName, "#{session_windows}"])).stdout.trim() || "0", 10);
|
|
100667
100793
|
if (count2 <= 1) {
|
|
100668
|
-
await this.runTmux(["new-window", "-d", "-t", this.sessionName]);
|
|
100794
|
+
await this.runTmux(["new-window", "-d", "-t", this.sessionName, "-c", this.resolveDefaultWorkingDir()]);
|
|
100669
100795
|
}
|
|
100670
100796
|
await this.runAndRefresh(["kill-window", "-t", windowId], true);
|
|
100671
100797
|
}
|
|
@@ -101135,6 +101261,9 @@ class DeviceSessionRuntime {
|
|
|
101135
101261
|
onPromptMarker: (paneId, marker24) => {
|
|
101136
101262
|
this.broadcast((listener) => listener.onPromptMarker?.(paneId, marker24));
|
|
101137
101263
|
},
|
|
101264
|
+
onClipboardWrite: (paneId, text3) => {
|
|
101265
|
+
this.broadcast((listener) => listener.onClipboardWrite?.(paneId, text3));
|
|
101266
|
+
},
|
|
101138
101267
|
onSnapshot: (payload) => {
|
|
101139
101268
|
this.broadcast((listener) => listener.onSnapshot?.(payload));
|
|
101140
101269
|
},
|
|
@@ -101205,6 +101334,9 @@ class DeviceSessionRuntime {
|
|
|
101205
101334
|
selectWindow(windowId) {
|
|
101206
101335
|
this.connection.selectWindow(windowId);
|
|
101207
101336
|
}
|
|
101337
|
+
updateDefaultWorkingDir(dir2) {
|
|
101338
|
+
this.connection.updateDefaultWorkingDir(dir2);
|
|
101339
|
+
}
|
|
101208
101340
|
createWindow(name24) {
|
|
101209
101341
|
this.connection.createWindow(name24);
|
|
101210
101342
|
}
|
|
@@ -103775,6 +103907,10 @@ class PushSupervisor {
|
|
|
103775
103907
|
}
|
|
103776
103908
|
await this.upsert(deviceId);
|
|
103777
103909
|
}
|
|
103910
|
+
updateDefaultWorkingDir(deviceId, dir2) {
|
|
103911
|
+
const entry = this.entries.get(deviceId);
|
|
103912
|
+
entry?.runtime?.updateDefaultWorkingDir(dir2);
|
|
103913
|
+
}
|
|
103778
103914
|
remove(deviceId) {
|
|
103779
103915
|
const entry = this.entries.get(deviceId);
|
|
103780
103916
|
if (!entry) {
|
|
@@ -104909,6 +105045,49 @@ function typeFromPerms(perms) {
|
|
|
104909
105045
|
return "other";
|
|
104910
105046
|
}
|
|
104911
105047
|
}
|
|
105048
|
+
function unescapeOctal(input) {
|
|
105049
|
+
if (!input.includes("\\"))
|
|
105050
|
+
return input;
|
|
105051
|
+
const result = [];
|
|
105052
|
+
let pendingBytes = [];
|
|
105053
|
+
const flushBytes = () => {
|
|
105054
|
+
if (pendingBytes.length === 0)
|
|
105055
|
+
return;
|
|
105056
|
+
result.push(new TextDecoder().decode(new Uint8Array(pendingBytes)));
|
|
105057
|
+
pendingBytes = [];
|
|
105058
|
+
};
|
|
105059
|
+
let i = 0;
|
|
105060
|
+
while (i < input.length) {
|
|
105061
|
+
if (input[i] !== "\\") {
|
|
105062
|
+
flushBytes();
|
|
105063
|
+
result.push(input[i]);
|
|
105064
|
+
i++;
|
|
105065
|
+
continue;
|
|
105066
|
+
}
|
|
105067
|
+
if (input[i + 1] === "\\") {
|
|
105068
|
+
flushBytes();
|
|
105069
|
+
result.push("\\");
|
|
105070
|
+
i += 2;
|
|
105071
|
+
continue;
|
|
105072
|
+
}
|
|
105073
|
+
if (i + 3 < input.length) {
|
|
105074
|
+
const digits = input.slice(i + 1, i + 4);
|
|
105075
|
+
if (/^[0-7]{3}$/.test(digits)) {
|
|
105076
|
+
const val = parseInt(digits, 8);
|
|
105077
|
+
if (val <= 255) {
|
|
105078
|
+
pendingBytes.push(val);
|
|
105079
|
+
i += 4;
|
|
105080
|
+
continue;
|
|
105081
|
+
}
|
|
105082
|
+
}
|
|
105083
|
+
}
|
|
105084
|
+
flushBytes();
|
|
105085
|
+
result.push("\\");
|
|
105086
|
+
i++;
|
|
105087
|
+
}
|
|
105088
|
+
flushBytes();
|
|
105089
|
+
return result.join("");
|
|
105090
|
+
}
|
|
104912
105091
|
function parseListOnly(stdout) {
|
|
104913
105092
|
const entries = [];
|
|
104914
105093
|
for (const rawLine of stdout.split(`
|
|
@@ -104918,7 +105097,7 @@ function parseListOnly(stdout) {
|
|
|
104918
105097
|
if (!m)
|
|
104919
105098
|
continue;
|
|
104920
105099
|
const type = typeFromPerms(m[1]);
|
|
104921
|
-
let name24 = m[9];
|
|
105100
|
+
let name24 = unescapeOctal(m[9]);
|
|
104922
105101
|
if (type === "symlink") {
|
|
104923
105102
|
const arrow = name24.indexOf(" -> ");
|
|
104924
105103
|
if (arrow >= 0)
|
|
@@ -105067,7 +105246,7 @@ function rsyncTargetArg(spec, remotePath) {
|
|
|
105067
105246
|
return `${spec.targetPrefix}${quoteShellArg(remotePath)}`;
|
|
105068
105247
|
}
|
|
105069
105248
|
function rsyncListArgs(spec, remotePath) {
|
|
105070
|
-
const args = ["--list-only"];
|
|
105249
|
+
const args = ["--list-only", "--8-bit-output"];
|
|
105071
105250
|
if (spec.rsh)
|
|
105072
105251
|
args.push("-e", spec.rsh);
|
|
105073
105252
|
args.push(rsyncTargetArg(spec, remotePath));
|
|
@@ -106422,8 +106601,8 @@ function getBaseVersion() {
|
|
|
106422
106601
|
if (cachedBase !== undefined)
|
|
106423
106602
|
return cachedBase;
|
|
106424
106603
|
let base = null;
|
|
106425
|
-
if ("0.
|
|
106426
|
-
base = "0.
|
|
106604
|
+
if ("0.14.0") {
|
|
106605
|
+
base = "0.14.0";
|
|
106427
106606
|
}
|
|
106428
106607
|
if (!base && config.isProd) {
|
|
106429
106608
|
base = readInstallMeta()?.cliVersion ?? null;
|
|
@@ -108442,6 +108621,7 @@ async function handleCreateDevice(req) {
|
|
|
108442
108621
|
username: body.username,
|
|
108443
108622
|
sshConfigRef: body.sshConfigRef,
|
|
108444
108623
|
session: body.session ?? "tmex",
|
|
108624
|
+
defaultWorkingDir: body.defaultWorkingDir?.trim() || undefined,
|
|
108445
108625
|
authMode: body.authMode,
|
|
108446
108626
|
passwordEnc: body.password ? await encrypt(body.password) : undefined,
|
|
108447
108627
|
privateKeyEnc: body.privateKey ? await encrypt(body.privateKey) : undefined,
|
|
@@ -108473,6 +108653,8 @@ async function handleUpdateDevice(req, id) {
|
|
|
108473
108653
|
updates.sshConfigRef = body.sshConfigRef;
|
|
108474
108654
|
if (body.session !== undefined)
|
|
108475
108655
|
updates.session = body.session;
|
|
108656
|
+
if (body.defaultWorkingDir !== undefined)
|
|
108657
|
+
updates.defaultWorkingDir = body.defaultWorkingDir.trim() || undefined;
|
|
108476
108658
|
if (body.authMode !== undefined)
|
|
108477
108659
|
updates.authMode = body.authMode;
|
|
108478
108660
|
if (body.password !== undefined)
|
|
@@ -108485,6 +108667,8 @@ async function handleUpdateDevice(req, id) {
|
|
|
108485
108667
|
updateDevice(id, updates);
|
|
108486
108668
|
if (shouldReconnectPushSupervisor(existing, updates)) {
|
|
108487
108669
|
await pushSupervisor.reconnect(id);
|
|
108670
|
+
} else if (updates.defaultWorkingDir !== undefined && updates.defaultWorkingDir !== existing.defaultWorkingDir) {
|
|
108671
|
+
pushSupervisor.updateDefaultWorkingDir(id, updates.defaultWorkingDir);
|
|
108488
108672
|
}
|
|
108489
108673
|
const device = getDeviceById(id);
|
|
108490
108674
|
return json9({ device });
|
|
@@ -109614,6 +109798,9 @@ class WebSocketServer {
|
|
|
109614
109798
|
onTerminalHistory: (paneId, data, alternateScreen) => {
|
|
109615
109799
|
this.broadcastTerminalHistory(deviceId, paneId, data, alternateScreen);
|
|
109616
109800
|
},
|
|
109801
|
+
onClipboardWrite: (paneId, text3) => {
|
|
109802
|
+
this.broadcastClipboardWrite(deviceId, paneId, text3);
|
|
109803
|
+
},
|
|
109617
109804
|
onSnapshot: (payload) => {
|
|
109618
109805
|
this.broadcastStateSnapshot(deviceId, payload);
|
|
109619
109806
|
},
|
|
@@ -109741,6 +109928,10 @@ class WebSocketServer {
|
|
|
109741
109928
|
this.connections.delete(deviceId);
|
|
109742
109929
|
}
|
|
109743
109930
|
}
|
|
109931
|
+
updateDefaultWorkingDir(deviceId, dir2) {
|
|
109932
|
+
const entry = this.connections.get(deviceId);
|
|
109933
|
+
entry?.runtime.updateDefaultWorkingDir(dir2);
|
|
109934
|
+
}
|
|
109744
109935
|
closeAll() {
|
|
109745
109936
|
for (const [deviceId, entry] of this.connections) {
|
|
109746
109937
|
this.releaseConnectionEntry(deviceId, entry);
|
|
@@ -110298,6 +110489,22 @@ class WebSocketServer {
|
|
|
110298
110489
|
this.sendChunked(client, exports_ws_borsh.KIND_TERM_OUTPUT, payloadBytes);
|
|
110299
110490
|
}
|
|
110300
110491
|
}
|
|
110492
|
+
broadcastClipboardWrite(deviceId, paneId, text3) {
|
|
110493
|
+
const entry = this.connections.get(deviceId);
|
|
110494
|
+
if (!entry)
|
|
110495
|
+
return;
|
|
110496
|
+
const payloadBytes = exports_ws_borsh.encodePayload(exports_ws_borsh.schema.ClipboardWriteSchema, {
|
|
110497
|
+
deviceId,
|
|
110498
|
+
paneId,
|
|
110499
|
+
text: text3
|
|
110500
|
+
});
|
|
110501
|
+
for (const client of entry.clients) {
|
|
110502
|
+
if (client.data.borshState.selectedPanes[deviceId] !== paneId) {
|
|
110503
|
+
continue;
|
|
110504
|
+
}
|
|
110505
|
+
this.sendEnvelope(client, exports_ws_borsh.KIND_CLIPBOARD_WRITE, payloadBytes);
|
|
110506
|
+
}
|
|
110507
|
+
}
|
|
110301
110508
|
broadcastTerminalHistory(deviceId, paneId, data, alternateScreen) {
|
|
110302
110509
|
const entry = this.connections.get(deviceId);
|
|
110303
110510
|
if (!entry)
|
|
@@ -110496,8 +110703,8 @@ var MESSAGES = {
|
|
|
110496
110703
|
"cli.help": `tmex CLI
|
|
110497
110704
|
|
|
110498
110705
|
Usage:
|
|
110499
|
-
tmex init [--no-interactive --install-dir <path> --host <host> --port <port> --db-path <path> --autostart <true|false> --bun-path <path>]
|
|
110500
|
-
tmex doctor [--install-dir <path>] [--json] [--bun-path <path>]
|
|
110706
|
+
tmex init [--no-interactive --install-dir <path> --host <host> --port <port> --db-path <path> --autostart <true|false> --bun-path <path> --install-deps --skip-dep-check]
|
|
110707
|
+
tmex doctor [--install-dir <path>] [--json] [--bun-path <path>] [--fix]
|
|
110501
110708
|
tmex upgrade [--version <version>] [--install-dir <path>] [--bun-path <path>]
|
|
110502
110709
|
tmex uninstall [--install-dir <path>] [--yes] [--purge]
|
|
110503
110710
|
|
|
@@ -110541,6 +110748,7 @@ Global flags:
|
|
|
110541
110748
|
"init.prompt.serviceName": "Service name (service-name)",
|
|
110542
110749
|
"init.prompt.dirExistsConfirm": "Directory {{installDir}} already exists. Continue (will not delete existing config/db)?",
|
|
110543
110750
|
"init.error.installDirNotEmpty": "Install directory is not empty: {{installDir}}. Use --force to overwrite.",
|
|
110751
|
+
"init.error.noServiceManager": "No supported service manager found (platform: {{platform}}). tmex requires systemd (Linux) or launchd (macOS).",
|
|
110544
110752
|
"init.warning.noServiceManager": "Service manager is not supported on platform {{platform}}. Files are deployed but autostart is not configured.",
|
|
110545
110753
|
"init.done": "Initialization completed.",
|
|
110546
110754
|
"init.summary.installDir": "Install dir",
|
|
@@ -110554,8 +110762,12 @@ Global flags:
|
|
|
110554
110762
|
"doctor.platform.unsupported": "Platform {{platform}} is not officially supported (only macOS and common Linux distros are guaranteed).",
|
|
110555
110763
|
"doctor.bun.ok": "Bun installed: {{version}}",
|
|
110556
110764
|
"doctor.bun.fail": "Bun check failed: {{reason}}",
|
|
110557
|
-
"doctor.tmux.ok": "tmux installed",
|
|
110558
|
-
"doctor.tmux.fail": "tmux not found (tmex requires tmux).",
|
|
110765
|
+
"doctor.tmux.ok": "tmux installed: {{version}}",
|
|
110766
|
+
"doctor.tmux.fail": "tmux not found (tmex requires tmux >= 3.0).",
|
|
110767
|
+
"doctor.tmux.versionLow": "tmux version too low: {{version}} (requires >= 3.0)",
|
|
110768
|
+
"doctor.fix.header": "Attempting to fix issues...",
|
|
110769
|
+
"doctor.fix.skip": "Skipping unfixable item: {{id}}",
|
|
110770
|
+
"doctor.fix.hint": 'Run "tmex doctor --fix" to attempt automatic installation.',
|
|
110559
110771
|
"doctor.ssh.ok": "ssh installed",
|
|
110560
110772
|
"doctor.ssh.missing": "ssh not found; SSH devices will not work.",
|
|
110561
110773
|
"doctor.installDir.exists": "Install directory exists: {{installDir}}",
|
|
@@ -110586,6 +110798,19 @@ Global flags:
|
|
|
110586
110798
|
"uninstall.done": "Uninstall completed.",
|
|
110587
110799
|
"uninstall.summary.installDir": "Install dir",
|
|
110588
110800
|
"uninstall.summary.serviceName": "Service name",
|
|
110801
|
+
"tmux.notFound": "tmux not found. tmex requires tmux >= 3.0 to operate.",
|
|
110802
|
+
"tmux.versionTooLow": "tmux version too low: current {{version}}, required >= 3.0",
|
|
110803
|
+
"deps.install.confirm": "Install {{dep}} now?",
|
|
110804
|
+
"deps.install.running": "Installing {{dep}}...",
|
|
110805
|
+
"deps.install.success": "{{dep}} installed successfully.",
|
|
110806
|
+
"deps.install.failed": "Failed to install {{dep}}.",
|
|
110807
|
+
"deps.install.manual": "Please install manually and retry.",
|
|
110808
|
+
"deps.install.sudoRequired": "This operation requires sudo.",
|
|
110809
|
+
"deps.install.sudoUnavailable": "sudo is not available. Please run as root or install sudo.",
|
|
110810
|
+
"deps.install.nonInteractive": "Missing dependency: {{dep}}. Use --install-deps to install automatically.",
|
|
110811
|
+
"deps.install.hint": "Suggested install command: {{command}}",
|
|
110812
|
+
"deps.install.brewMissing": "Homebrew not found. Install Homebrew first: https://brew.sh",
|
|
110813
|
+
"deps.install.unknownDistro": "Unable to detect Linux distribution. Please install {{dep}} manually.",
|
|
110589
110814
|
"runtime.restartRequested": "Restart requested; exiting for service manager restart.",
|
|
110590
110815
|
"runtime.started": "Service started on {{url}}",
|
|
110591
110816
|
"runtime.frontendMissing": "Frontend assets not found.",
|
|
@@ -110597,8 +110822,8 @@ Global flags:
|
|
|
110597
110822
|
"cli.help": `tmex CLI
|
|
110598
110823
|
|
|
110599
110824
|
\u7528\u6CD5\uFF1A
|
|
110600
|
-
tmex init [--no-interactive --install-dir <path> --host <host> --port <port> --db-path <path> --autostart <true|false> --bun-path <path>]
|
|
110601
|
-
tmex doctor [--install-dir <path>] [--json] [--bun-path <path>]
|
|
110825
|
+
tmex init [--no-interactive --install-dir <path> --host <host> --port <port> --db-path <path> --autostart <true|false> --bun-path <path> --install-deps --skip-dep-check]
|
|
110826
|
+
tmex doctor [--install-dir <path>] [--json] [--bun-path <path>] [--fix]
|
|
110602
110827
|
tmex upgrade [--version <version>] [--install-dir <path>] [--bun-path <path>]
|
|
110603
110828
|
tmex uninstall [--install-dir <path>] [--yes] [--purge]
|
|
110604
110829
|
|
|
@@ -110642,6 +110867,7 @@ Global flags:
|
|
|
110642
110867
|
"init.prompt.serviceName": "\u670D\u52A1\u540D\u79F0\uFF08service-name\uFF09",
|
|
110643
110868
|
"init.prompt.dirExistsConfirm": "\u76EE\u5F55 {{installDir}} \u5DF2\u5B58\u5728\uFF0C\u662F\u5426\u7EE7\u7EED\uFF08\u4E0D\u4F1A\u5220\u9664\u73B0\u6709\u914D\u7F6E\u4E0E\u6570\u636E\u5E93\uFF09\uFF1F",
|
|
110644
110869
|
"init.error.installDirNotEmpty": "\u5B89\u88C5\u76EE\u5F55\u5DF2\u5B58\u5728\u4E14\u975E\u7A7A\uFF1A{{installDir}}\u3002\u5982\u9700\u8986\u76D6\u8BF7\u52A0 --force",
|
|
110870
|
+
"init.error.noServiceManager": "\u672A\u68C0\u6D4B\u5230\u53EF\u7528\u7684\u670D\u52A1\u7BA1\u7406\u5668\uFF08\u5E73\u53F0\uFF1A{{platform}}\uFF09\u3002tmex \u9700\u8981 systemd\uFF08Linux\uFF09\u6216 launchd\uFF08macOS\uFF09\u3002",
|
|
110645
110871
|
"init.warning.noServiceManager": "\u5F53\u524D\u5E73\u53F0 {{platform}} \u672A\u5B9E\u73B0\u81EA\u52A8\u670D\u52A1\u5B89\u88C5\uFF0C\u5DF2\u5B8C\u6210\u6587\u4EF6\u90E8\u7F72\u3002",
|
|
110646
110872
|
"init.done": "\u521D\u59CB\u5316\u5B8C\u6210\u3002",
|
|
110647
110873
|
"init.summary.installDir": "\u5B89\u88C5\u76EE\u5F55",
|
|
@@ -110655,8 +110881,12 @@ Global flags:
|
|
|
110655
110881
|
"doctor.platform.unsupported": "\u5F53\u524D\u5E73\u53F0 {{platform}} \u975E\u5B98\u65B9\u652F\u6301\u8303\u56F4\uFF08\u4EC5\u4FDD\u8BC1 macOS \u4E0E\u5E38\u89C1 Linux \u53D1\u884C\u7248\uFF09\u3002",
|
|
110656
110882
|
"doctor.bun.ok": "Bun \u5DF2\u5B89\u88C5\uFF1A{{version}}",
|
|
110657
110883
|
"doctor.bun.fail": "Bun \u68C0\u67E5\u5931\u8D25\uFF1A{{reason}}",
|
|
110658
|
-
"doctor.tmux.ok": "tmux \u5DF2\u5B89\u88C5",
|
|
110659
|
-
"doctor.tmux.fail": "\u672A\u68C0\u6D4B\u5230 tmux\uFF08tmex \u9700\u8981 tmux \u624D\u80FD\u5DE5\u4F5C\uFF09\u3002",
|
|
110884
|
+
"doctor.tmux.ok": "tmux \u5DF2\u5B89\u88C5\uFF1A{{version}}",
|
|
110885
|
+
"doctor.tmux.fail": "\u672A\u68C0\u6D4B\u5230 tmux\uFF08tmex \u9700\u8981 tmux >= 3.0 \u624D\u80FD\u5DE5\u4F5C\uFF09\u3002",
|
|
110886
|
+
"doctor.tmux.versionLow": "tmux \u7248\u672C\u8FC7\u4F4E\uFF1A{{version}}\uFF08\u8981\u6C42 >= 3.0\uFF09",
|
|
110887
|
+
"doctor.fix.header": "\u6B63\u5728\u5C1D\u8BD5\u4FEE\u590D\u95EE\u9898...",
|
|
110888
|
+
"doctor.fix.skip": "\u8DF3\u8FC7\u65E0\u6CD5\u81EA\u52A8\u4FEE\u590D\u7684\u9879\u76EE\uFF1A{{id}}",
|
|
110889
|
+
"doctor.fix.hint": '\u8FD0\u884C "tmex doctor --fix" \u5C1D\u8BD5\u81EA\u52A8\u5B89\u88C5\u7F3A\u5931\u7684\u4F9D\u8D56\u3002',
|
|
110660
110890
|
"doctor.ssh.ok": "ssh \u5DF2\u5B89\u88C5",
|
|
110661
110891
|
"doctor.ssh.missing": "\u672A\u68C0\u6D4B\u5230 ssh\uFF0C\u8FDC\u7A0B\u8BBE\u5907\u5C06\u4E0D\u53EF\u7528\u3002",
|
|
110662
110892
|
"doctor.installDir.exists": "\u5B89\u88C5\u76EE\u5F55\u5B58\u5728\uFF1A{{installDir}}",
|
|
@@ -110687,6 +110917,19 @@ Global flags:
|
|
|
110687
110917
|
"uninstall.done": "\u5378\u8F7D\u5B8C\u6210\u3002",
|
|
110688
110918
|
"uninstall.summary.installDir": "\u5B89\u88C5\u76EE\u5F55",
|
|
110689
110919
|
"uninstall.summary.serviceName": "\u670D\u52A1\u540D\u79F0",
|
|
110920
|
+
"tmux.notFound": "\u672A\u68C0\u6D4B\u5230 tmux\u3002tmex \u9700\u8981 tmux >= 3.0 \u624D\u80FD\u5DE5\u4F5C\u3002",
|
|
110921
|
+
"tmux.versionTooLow": "tmux \u7248\u672C\u8FC7\u4F4E\uFF1A\u5F53\u524D {{version}}\uFF0C\u8981\u6C42 >= 3.0",
|
|
110922
|
+
"deps.install.confirm": "\u662F\u5426\u73B0\u5728\u5B89\u88C5 {{dep}}\uFF1F",
|
|
110923
|
+
"deps.install.running": "\u6B63\u5728\u5B89\u88C5 {{dep}}...",
|
|
110924
|
+
"deps.install.success": "{{dep}} \u5B89\u88C5\u6210\u529F\u3002",
|
|
110925
|
+
"deps.install.failed": "\u5B89\u88C5 {{dep}} \u5931\u8D25\u3002",
|
|
110926
|
+
"deps.install.manual": "\u8BF7\u624B\u52A8\u5B89\u88C5\u540E\u91CD\u8BD5\u3002",
|
|
110927
|
+
"deps.install.sudoRequired": "\u6B64\u64CD\u4F5C\u9700\u8981 sudo \u6743\u9650\u3002",
|
|
110928
|
+
"deps.install.sudoUnavailable": "sudo \u4E0D\u53EF\u7528\uFF0C\u8BF7\u4EE5 root \u8EAB\u4EFD\u6267\u884C\u6216\u5B89\u88C5 sudo\u3002",
|
|
110929
|
+
"deps.install.nonInteractive": "\u7F3A\u5C11\u4F9D\u8D56\uFF1A{{dep}}\u3002\u4F7F\u7528 --install-deps \u81EA\u52A8\u5B89\u88C5\u3002",
|
|
110930
|
+
"deps.install.hint": "\u5EFA\u8BAE\u5B89\u88C5\u547D\u4EE4\uFF1A{{command}}",
|
|
110931
|
+
"deps.install.brewMissing": "\u672A\u68C0\u6D4B\u5230 Homebrew\uFF0C\u8BF7\u5148\u5B89\u88C5 Homebrew\uFF1Ahttps://brew.sh",
|
|
110932
|
+
"deps.install.unknownDistro": "\u65E0\u6CD5\u68C0\u6D4B Linux \u53D1\u884C\u7248\uFF0C\u8BF7\u624B\u52A8\u5B89\u88C5 {{dep}}\u3002",
|
|
110690
110933
|
"runtime.restartRequested": "\u6536\u5230\u91CD\u542F\u8BF7\u6C42\uFF0C\u9000\u51FA\u5E76\u7B49\u5F85\u670D\u52A1\u7BA1\u7406\u5668\u62C9\u8D77\u3002",
|
|
110691
110934
|
"runtime.started": "\u670D\u52A1\u5DF2\u542F\u52A8\uFF1A{{url}}",
|
|
110692
110935
|
"runtime.frontendMissing": "\u672A\u627E\u5230\u524D\u7AEF\u9759\u6001\u8D44\u6E90\u3002",
|