tmex-cli 0.1.5 → 0.1.7

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 (26) hide show
  1. package/dist/runtime/server.js +383 -16
  2. package/package.json +3 -2
  3. package/resources/fe-dist/assets/DevicePage-Beg8tuEN.css +32 -0
  4. package/resources/fe-dist/assets/DevicePage-DXr7cn5f.js +31 -0
  5. package/resources/fe-dist/assets/DevicePage-DXr7cn5f.js.map +1 -0
  6. package/resources/fe-dist/assets/DevicesPage-DClS6lhB.js +17 -0
  7. package/resources/fe-dist/assets/DevicesPage-DClS6lhB.js.map +1 -0
  8. package/resources/fe-dist/assets/SettingsPage-DZPiSKLS.js +17 -0
  9. package/resources/fe-dist/assets/SettingsPage-DZPiSKLS.js.map +1 -0
  10. package/resources/fe-dist/assets/index-DLLCJhRn.css +1 -0
  11. package/resources/fe-dist/assets/index-uap7lu9-.js +200 -0
  12. package/resources/fe-dist/assets/index-uap7lu9-.js.map +1 -0
  13. package/resources/fe-dist/assets/select-DOLHUgAj.js +12 -0
  14. package/resources/fe-dist/assets/select-DOLHUgAj.js.map +1 -0
  15. package/resources/fe-dist/assets/switch-DbiHVHFg.js +12 -0
  16. package/resources/fe-dist/assets/switch-DbiHVHFg.js.map +1 -0
  17. package/resources/fe-dist/assets/useValueChanged-DoNZeDee.js +2 -0
  18. package/resources/fe-dist/assets/useValueChanged-DoNZeDee.js.map +1 -0
  19. package/resources/fe-dist/index.html +2 -2
  20. package/resources/fe-dist/logo.png +0 -0
  21. package/resources/gateway-drizzle/0000_busy_starjammers.sql +1 -2
  22. package/resources/gateway-drizzle/meta/0000_snapshot.json +0 -4
  23. package/resources/gateway-drizzle/meta/0001_snapshot.json +0 -4
  24. package/resources/fe-dist/assets/index-CJ--lZZc.css +0 -32
  25. package/resources/fe-dist/assets/index-NgVYQDSW.js +0 -333
  26. package/resources/fe-dist/assets/index-NgVYQDSW.js.map +0 -1
@@ -19583,7 +19583,7 @@ var I18N_RESOURCES = {
19583
19583
  pwaInstallHintIOSChrome: 'iOS Chrome does not show an automatic install prompt. Tap Share, then "Add to Home Screen".'
19584
19584
  },
19585
19585
  nav: {
19586
- deviceManagement: "Device Management",
19586
+ manageDevices: "Manage Devices",
19587
19587
  settings: "Settings",
19588
19588
  sidebarExpand: "Expand Sidebar",
19589
19589
  sidebarCollapse: "Collapse Sidebar",
@@ -19591,10 +19591,13 @@ var I18N_RESOURCES = {
19591
19591
  closeSidebar: "Close Sidebar",
19592
19592
  jumpToLatest: "Jump to Latest",
19593
19593
  switchToEditor: "Switch to Editor Input",
19594
- switchToDirect: "Switch to Direct Input"
19594
+ switchToDirect: "Switch to Direct Input",
19595
+ refreshPage: "Refresh Page",
19596
+ refreshPageConfirm: "Are you sure you want to refresh the page? Unsaved content will be lost."
19595
19597
  },
19596
19598
  device: {
19597
19599
  title: "Device Management",
19600
+ devices: "Devices",
19598
19601
  addDevice: "Add Device",
19599
19602
  addFirstDevice: "Add First Device",
19600
19603
  editDevice: "Edit Device",
@@ -19605,6 +19608,7 @@ var I18N_RESOURCES = {
19605
19608
  type: "Type",
19606
19609
  typeLocal: "Local Device",
19607
19610
  typeSSH: "SSH Remote Device",
19611
+ typeSSHBadge: "SSH",
19608
19612
  host: "Host",
19609
19613
  hostPlaceholder: "example.com",
19610
19614
  port: "Port",
@@ -19685,6 +19689,12 @@ var I18N_RESOURCES = {
19685
19689
  languagePlaceholder: "Select language",
19686
19690
  language_en_US: "English",
19687
19691
  language_zh_CN: "\u7B80\u4F53\u4E2D\u6587",
19692
+ language_ja_JP: "\u65E5\u672C\u8A9E",
19693
+ theme: "Theme",
19694
+ themeLight: "Light",
19695
+ themeDark: "Dark",
19696
+ siteTab: "Site",
19697
+ notificationsTab: "Notifications",
19688
19698
  refreshToApply: "Refresh to apply language change",
19689
19699
  saveSettings: "Save Settings",
19690
19700
  settingsSaved: "Settings saved",
@@ -19692,6 +19702,7 @@ var I18N_RESOURCES = {
19692
19702
  loadFailed: "Failed to load settings",
19693
19703
  restartGateway: "Restart Gateway",
19694
19704
  restartScheduled: "Gateway restart scheduled",
19705
+ restartConfirm: "Are you sure you want to restart Gateway? This will interrupt all active connections.",
19695
19706
  restartFailed: "Failed to restart gateway",
19696
19707
  sshReconnectMaxRetries: "SSH Reconnect Retries"
19697
19708
  },
@@ -19751,6 +19762,19 @@ Time: {{time}}`,
19751
19762
  botNotFound: "Bot not found or unavailable",
19752
19763
  botNotRunning: "Bot is not running or unavailable"
19753
19764
  },
19765
+ webhook: {
19766
+ title: "Webhooks",
19767
+ url: "Webhook URL",
19768
+ secret: "Secret",
19769
+ secretPlaceholder: "Used to sign payloads (HMAC-SHA256)",
19770
+ enabled: "Enabled",
19771
+ eventMask: "Events",
19772
+ add: "Add Webhook",
19773
+ empty: "No webhooks yet.",
19774
+ createFailed: "Failed to create webhook",
19775
+ deleteFailed: "Failed to delete webhook",
19776
+ loadFailed: "Failed to load webhooks"
19777
+ },
19754
19778
  sshError: {
19755
19779
  sshConfigRefNotSupported: "SSH Config reference is not supported in this version. Please use host + username with Agent/Key/Password authentication.",
19756
19780
  configRefNotSupported: "SSH Config reference is not supported in this version. Please use host + username with Agent/Key/Password authentication.",
@@ -19786,7 +19810,7 @@ Time: {{time}}`,
19786
19810
  bellThrottleInvalid: "Bell throttle seconds must be between 0-300",
19787
19811
  sshRetriesInvalid: "SSH reconnect retries must be between 0-20",
19788
19812
  sshDelayInvalid: "SSH reconnect delay must be between 1-300 seconds",
19789
- languageInvalid: "Language must be en_US or zh_CN",
19813
+ languageInvalid: "Language must be one of the supported locales",
19790
19814
  botNameRequired: "Bot name cannot be empty",
19791
19815
  botTokenRequired: "Bot token cannot be empty",
19792
19816
  missingFields: "Missing required fields",
@@ -19877,11 +19901,11 @@ Time: {{time}}`,
19877
19901
  optional: "\u53EF\u9009",
19878
19902
  required: "\u5FC5\u586B",
19879
19903
  pwaInstallTitle: "\u5B89\u88C5\u4E3A\u5E94\u7528",
19880
- pwaInstallHintIOSSafari: "iOS Safari \u4E0D\u4F1A\u81EA\u52A8\u5F39\u51FA\u5B89\u88C5\u63D0\u793A\u3002\u8BF7\u70B9\u51FB\u201C\u5206\u4EAB\u201D\uFF0C\u518D\u9009\u62E9\u201C\u6DFB\u52A0\u5230\u4E3B\u5C4F\u5E55\u201D\u3002",
19881
- pwaInstallHintIOSChrome: "iOS Chrome \u4E0D\u4F1A\u81EA\u52A8\u5F39\u51FA\u5B89\u88C5\u63D0\u793A\u3002\u8BF7\u70B9\u51FB\u201C\u5206\u4EAB\u201D\uFF0C\u518D\u9009\u62E9\u201C\u6DFB\u52A0\u5230\u4E3B\u5C4F\u5E55\u201D\u3002"
19904
+ pwaInstallHintIOSSafari: "iOS Safari \u4E0D\u4F1A\u81EA\u52A8\u5F39\u51FA\u5B89\u88C5\u63D0\u793A\u3002\u8BF7\u70B9\u51FB\u300C\u5206\u4EAB\u300D\uFF0C\u518D\u9009\u62E9\u300C\u6DFB\u52A0\u5230\u4E3B\u5C4F\u5E55\u300D\u3002",
19905
+ pwaInstallHintIOSChrome: "iOS Chrome \u4E0D\u4F1A\u81EA\u52A8\u5F39\u51FA\u5B89\u88C5\u63D0\u793A\u3002\u8BF7\u70B9\u51FB\u300C\u5206\u4EAB\u300D\uFF0C\u518D\u9009\u62E9\u300C\u6DFB\u52A0\u5230\u4E3B\u5C4F\u5E55\u300D"
19882
19906
  },
19883
19907
  nav: {
19884
- deviceManagement: "\u8BBE\u5907\u7BA1\u7406",
19908
+ manageDevices: "\u7BA1\u7406\u8BBE\u5907",
19885
19909
  settings: "\u8BBE\u7F6E",
19886
19910
  sidebarExpand: "\u5C55\u5F00\u4FA7\u8FB9\u680F",
19887
19911
  sidebarCollapse: "\u6536\u8D77\u4FA7\u8FB9\u680F",
@@ -19889,10 +19913,13 @@ Time: {{time}}`,
19889
19913
  closeSidebar: "\u5173\u95ED\u4FA7\u8FB9\u680F",
19890
19914
  jumpToLatest: "\u8DF3\u8F6C\u5230\u6700\u65B0",
19891
19915
  switchToEditor: "\u5207\u6362\u5230\u7F16\u8F91\u5668\u8F93\u5165",
19892
- switchToDirect: "\u5207\u6362\u5230\u76F4\u63A5\u8F93\u5165"
19916
+ switchToDirect: "\u5207\u6362\u5230\u76F4\u63A5\u8F93\u5165",
19917
+ refreshPage: "\u5237\u65B0\u9875\u9762",
19918
+ refreshPageConfirm: "\u786E\u5B9A\u8981\u5237\u65B0\u9875\u9762\u5417\uFF1F\u672A\u4FDD\u5B58\u7684\u5185\u5BB9\u5C06\u4F1A\u4E22\u5931\u3002"
19893
19919
  },
19894
19920
  device: {
19895
19921
  title: "\u8BBE\u5907\u7BA1\u7406",
19922
+ devices: "\u8BBE\u5907",
19896
19923
  addDevice: "\u6DFB\u52A0\u8BBE\u5907",
19897
19924
  addFirstDevice: "\u6DFB\u52A0\u7B2C\u4E00\u4E2A\u8BBE\u5907",
19898
19925
  editDevice: "\u4FEE\u6539\u8BBE\u5907",
@@ -19903,6 +19930,7 @@ Time: {{time}}`,
19903
19930
  type: "\u7C7B\u578B",
19904
19931
  typeLocal: "\u672C\u5730\u8BBE\u5907",
19905
19932
  typeSSH: "SSH \u8FDC\u7A0B\u8BBE\u5907",
19933
+ typeSSHBadge: "SSH",
19906
19934
  host: "\u4E3B\u673A",
19907
19935
  hostPlaceholder: "example.com",
19908
19936
  port: "\u7AEF\u53E3",
@@ -19983,6 +20011,12 @@ Time: {{time}}`,
19983
20011
  languagePlaceholder: "\u9009\u62E9\u8BED\u8A00",
19984
20012
  language_en_US: "English",
19985
20013
  language_zh_CN: "\u7B80\u4F53\u4E2D\u6587",
20014
+ language_ja_JP: "\u65E5\u672C\u8A9E",
20015
+ theme: "\u4E3B\u9898",
20016
+ themeLight: "\u6D45\u8272",
20017
+ themeDark: "\u6DF1\u8272",
20018
+ siteTab: "\u7AD9\u70B9",
20019
+ notificationsTab: "\u901A\u77E5",
19986
20020
  refreshToApply: "\u5237\u65B0\u540E\u751F\u6548",
19987
20021
  saveSettings: "\u4FDD\u5B58\u8BBE\u7F6E",
19988
20022
  settingsSaved: "\u7AD9\u70B9\u8BBE\u7F6E\u5DF2\u4FDD\u5B58",
@@ -19990,6 +20024,7 @@ Time: {{time}}`,
19990
20024
  loadFailed: "\u52A0\u8F7D\u8BBE\u7F6E\u5931\u8D25",
19991
20025
  restartGateway: "\u91CD\u542F Gateway",
19992
20026
  restartScheduled: "Gateway \u91CD\u542F\u8BF7\u6C42\u5DF2\u53D1\u9001",
20027
+ restartConfirm: "\u786E\u5B9A\u8981\u91CD\u542F Gateway \u5417\uFF1F\u8FD9\u5C06\u4E2D\u65AD\u6240\u6709\u6D3B\u52A8\u8FDE\u63A5\u3002",
19993
20028
  restartFailed: "\u91CD\u542F\u8BF7\u6C42\u5931\u8D25",
19994
20029
  sshReconnectMaxRetries: "SSH \u91CD\u8FDE\u6B21\u6570"
19995
20030
  },
@@ -20049,6 +20084,19 @@ Bot\uFF1A{{botName}}
20049
20084
  botNotFound: "Bot \u672A\u542F\u52A8\u6216\u4E0D\u53EF\u7528",
20050
20085
  botNotRunning: "Bot \u672A\u542F\u52A8\u6216\u4E0D\u53EF\u7528"
20051
20086
  },
20087
+ webhook: {
20088
+ title: "Webhooks",
20089
+ url: "Webhook \u5730\u5740",
20090
+ secret: "\u5BC6\u94A5",
20091
+ secretPlaceholder: "\u7528\u4E8E\u7B7E\u540D\uFF08HMAC-SHA256\uFF09",
20092
+ enabled: "\u542F\u7528",
20093
+ eventMask: "\u4E8B\u4EF6",
20094
+ add: "\u6DFB\u52A0 Webhook",
20095
+ empty: "\u6682\u65E0 Webhook\u3002",
20096
+ createFailed: "\u521B\u5EFA Webhook \u5931\u8D25",
20097
+ deleteFailed: "\u5220\u9664 Webhook \u5931\u8D25",
20098
+ loadFailed: "\u52A0\u8F7D Webhook \u5931\u8D25"
20099
+ },
20052
20100
  sshError: {
20053
20101
  sshConfigRefNotSupported: "\u5F53\u524D\u7248\u672C\u6682\u4E0D\u652F\u6301 SSH Config \u5F15\u7528\uFF0C\u8BF7\u6539\u4E3A\u586B\u5199 host + username\uFF0C\u5E76\u9009\u62E9 Agent/\u79C1\u94A5/\u5BC6\u7801\u8BA4\u8BC1",
20054
20102
  configRefNotSupported: "\u5F53\u524D\u7248\u672C\u6682\u4E0D\u652F\u6301 SSH Config \u5F15\u7528\uFF0C\u8BF7\u6539\u4E3A\u586B\u5199 host + username\uFF0C\u5E76\u9009\u62E9 Agent/\u79C1\u94A5/\u5BC6\u7801\u8BA4\u8BC1",
@@ -20084,7 +20132,7 @@ Bot\uFF1A{{botName}}
20084
20132
  bellThrottleInvalid: "Bell \u9891\u63A7\u79D2\u6570\u9700\u5728 0-300 \u4E4B\u95F4",
20085
20133
  sshRetriesInvalid: "SSH \u91CD\u8FDE\u6B21\u6570\u9700\u5728 0-20 \u4E4B\u95F4",
20086
20134
  sshDelayInvalid: "SSH \u91CD\u8FDE\u7B49\u5F85\u65F6\u95F4\u9700\u5728 1-300 \u79D2\u4E4B\u95F4",
20087
- languageInvalid: "\u8BED\u8A00\u5FC5\u987B\u662F en_US \u6216 zh_CN",
20135
+ languageInvalid: "\u8BED\u8A00\u5FC5\u987B\u662F\u53D7\u652F\u6301\u7684\u533A\u57DF\u8BBE\u7F6E\u4E4B\u4E00",
20088
20136
  botNameRequired: "Bot \u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A",
20089
20137
  botTokenRequired: "Bot token \u4E0D\u80FD\u4E3A\u7A7A",
20090
20138
  missingFields: "\u7F3A\u5C11\u5FC5\u586B\u5B57\u6BB5",
@@ -20140,15 +20188,335 @@ Bot\uFF1A{{botName}}
20140
20188
  hostRequired: "SSH \u8BBE\u5907\u9700\u8981\u586B\u5199\u4E3B\u673A\u5730\u5740"
20141
20189
  }
20142
20190
  }
20191
+ },
20192
+ ja_JP: {
20193
+ translation: {
20194
+ common: {
20195
+ loading: "\u8AAD\u307F\u8FBC\u307F\u4E2D...",
20196
+ save: "\u4FDD\u5B58",
20197
+ saving: "\u4FDD\u5B58\u4E2D...",
20198
+ cancel: "\u30AD\u30E3\u30F3\u30BB\u30EB",
20199
+ add: "\u8FFD\u52A0",
20200
+ delete: "\u524A\u9664",
20201
+ edit: "\u7DE8\u96C6",
20202
+ confirm: "\u78BA\u8A8D",
20203
+ close: "\u9589\u3058\u308B",
20204
+ expand: "\u5C55\u958B",
20205
+ collapse: "\u6298\u308A\u305F\u305F\u3080",
20206
+ refresh: "\u66F4\u65B0",
20207
+ test: "\u30C6\u30B9\u30C8",
20208
+ send: "\u9001\u4FE1",
20209
+ success: "\u6210\u529F",
20210
+ error: "\u30A8\u30E9\u30FC",
20211
+ warning: "\u8B66\u544A",
20212
+ info: "\u60C5\u5831",
20213
+ yes: "\u306F\u3044",
20214
+ no: "\u3044\u3044\u3048",
20215
+ enabled: "\u6709\u52B9",
20216
+ disabled: "\u7121\u52B9",
20217
+ pending: "\u4FDD\u7559\u4E2D",
20218
+ authorized: "\u627F\u8A8D\u6E08\u307F",
20219
+ unknown: "\u4E0D\u660E",
20220
+ empty: "\u7A7A",
20221
+ none: "\u306A\u3057",
20222
+ default: "\u30C7\u30D5\u30A9\u30EB\u30C8",
20223
+ optional: "\u4EFB\u610F",
20224
+ required: "\u5FC5\u9808",
20225
+ pwaInstallTitle: "\u30A2\u30D7\u30EA\u3068\u3057\u3066\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB",
20226
+ pwaInstallHintIOSSafari: "iOS Safari \u3067\u306F\u81EA\u52D5\u7684\u306B\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u30D7\u30ED\u30F3\u30D7\u30C8\u304C\u8868\u793A\u3055\u308C\u307E\u305B\u3093\u3002\u5171\u6709\u30DC\u30BF\u30F3\u3092\u30BF\u30C3\u30D7\u3057\u3001\u300C\u30DB\u30FC\u30E0\u753B\u9762\u306B\u8FFD\u52A0\u300D\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
20227
+ pwaInstallHintIOSChrome: "iOS Chrome \u3067\u306F\u81EA\u52D5\u7684\u306B\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u30D7\u30ED\u30F3\u30D7\u30C8\u304C\u8868\u793A\u3055\u308C\u307E\u305B\u3093\u3002\u5171\u6709\u30DC\u30BF\u30F3\u3092\u30BF\u30C3\u30D7\u3057\u3001\u300C\u30DB\u30FC\u30E0\u753B\u9762\u306B\u8FFD\u52A0\u300D\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002"
20228
+ },
20229
+ nav: {
20230
+ manageDevices: "\u30C7\u30D0\u30A4\u30B9\u7BA1\u7406",
20231
+ settings: "\u8A2D\u5B9A",
20232
+ sidebarExpand: "\u30B5\u30A4\u30C9\u30D0\u30FC\u3092\u5C55\u958B",
20233
+ sidebarCollapse: "\u30B5\u30A4\u30C9\u30D0\u30FC\u3092\u6298\u308A\u305F\u305F\u3080",
20234
+ openSidebar: "\u30B5\u30A4\u30C9\u30D0\u30FC\u3092\u958B\u304F",
20235
+ closeSidebar: "\u30B5\u30A4\u30C9\u30D0\u30FC\u3092\u9589\u3058\u308B",
20236
+ jumpToLatest: "\u6700\u65B0\u306B\u30B8\u30E3\u30F3\u30D7",
20237
+ switchToEditor: "\u30A8\u30C7\u30A3\u30BF\u5165\u529B\u306B\u5207\u308A\u66FF\u3048",
20238
+ switchToDirect: "\u76F4\u63A5\u5165\u529B\u306B\u5207\u308A\u66FF\u3048",
20239
+ refreshPage: "\u30DA\u30FC\u30B8\u3092\u66F4\u65B0",
20240
+ refreshPageConfirm: "\u30DA\u30FC\u30B8\u3092\u66F4\u65B0\u3057\u3066\u3082\u3088\u308D\u3057\u3044\u3067\u3059\u304B\uFF1F\u4FDD\u5B58\u3055\u308C\u3066\u3044\u306A\u3044\u5185\u5BB9\u306F\u5931\u308F\u308C\u307E\u3059\u3002"
20241
+ },
20242
+ device: {
20243
+ title: "\u30C7\u30D0\u30A4\u30B9\u7BA1\u7406",
20244
+ devices: "\u30C7\u30D0\u30A4\u30B9",
20245
+ addDevice: "\u30C7\u30D0\u30A4\u30B9\u3092\u8FFD\u52A0",
20246
+ addFirstDevice: "\u6700\u521D\u306E\u30C7\u30D0\u30A4\u30B9\u3092\u8FFD\u52A0",
20247
+ editDevice: "\u30C7\u30D0\u30A4\u30B9\u3092\u7DE8\u96C6",
20248
+ noDevices: "\u30C7\u30D0\u30A4\u30B9\u304C\u3042\u308A\u307E\u305B\u3093",
20249
+ noDevicesDescription: "\u30ED\u30FC\u30AB\u30EB\u307E\u305F\u306F SSH \u30C7\u30D0\u30A4\u30B9\u3092\u8FFD\u52A0\u3057\u3066\u958B\u59CB",
20250
+ name: "\u30C7\u30D0\u30A4\u30B9\u540D",
20251
+ namePlaceholder: "\u4F8B\uFF1AMy Server",
20252
+ type: "\u30BF\u30A4\u30D7",
20253
+ typeLocal: "\u30ED\u30FC\u30AB\u30EB\u30C7\u30D0\u30A4\u30B9",
20254
+ typeSSH: "SSH \u30EA\u30E2\u30FC\u30C8\u30C7\u30D0\u30A4\u30B9",
20255
+ typeSSHBadge: "SSH",
20256
+ host: "\u30DB\u30B9\u30C8",
20257
+ hostPlaceholder: "example.com",
20258
+ port: "\u30DD\u30FC\u30C8",
20259
+ username: "\u30E6\u30FC\u30B6\u30FC\u540D",
20260
+ usernamePlaceholder: "root",
20261
+ session: "Tmux \u30BB\u30C3\u30B7\u30E7\u30F3\u540D",
20262
+ sessionPlaceholder: "tmex",
20263
+ sessionHint: "\u7A7A\u306E\u5834\u5408\u3001\u30C7\u30D5\u30A9\u30EB\u30C8\u306E\u300Ctmex\u300D\u304C\u4F7F\u7528\u3055\u308C\u307E\u3059",
20264
+ authMode: "\u8A8D\u8A3C\u30E2\u30FC\u30C9",
20265
+ authPassword: "\u30D1\u30B9\u30EF\u30FC\u30C9",
20266
+ authKey: "\u79D8\u5BC6\u9375",
20267
+ authAgent: "SSH Agent",
20268
+ authConfigRef: "SSH Config",
20269
+ password: "\u30D1\u30B9\u30EF\u30FC\u30C9",
20270
+ privateKey: "\u79D8\u5BC6\u9375",
20271
+ privateKeyPlaceholder: "-----BEGIN OPENSSH PRIVATE KEY-----",
20272
+ privateKeyPassphrase: "\u79D8\u5BC6\u9375\u306E\u30D1\u30B9\u30D5\u30EC\u30FC\u30BA\uFF08\u4EFB\u610F\uFF09",
20273
+ passphrase: "\u30D1\u30B9\u30D5\u30EC\u30FC\u30BA",
20274
+ connect: "\u63A5\u7D9A",
20275
+ connected: "\u63A5\u7D9A\u6E08\u307F",
20276
+ disconnected: "\u5207\u65AD\u6E08\u307F",
20277
+ connecting: "\u63A5\u7D9A\u4E2D...",
20278
+ deleteConfirm: "\u3053\u306E\u30C7\u30D0\u30A4\u30B9\u3092\u524A\u9664\u3057\u307E\u3059\u304B\uFF1F",
20279
+ deleteSuccess: "\u30C7\u30D0\u30A4\u30B9\u3092\u524A\u9664\u3057\u307E\u3057\u305F",
20280
+ createSuccess: "\u30C7\u30D0\u30A4\u30B9\u3092\u4F5C\u6210\u3057\u307E\u3057\u305F",
20281
+ updateSuccess: "\u30C7\u30D0\u30A4\u30B9\u3092\u66F4\u65B0\u3057\u307E\u3057\u305F",
20282
+ deleteFailed: "\u30C7\u30D0\u30A4\u30B9\u306E\u524A\u9664\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
20283
+ createFailed: "\u30C7\u30D0\u30A4\u30B9\u306E\u4F5C\u6210\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
20284
+ updateFailed: "\u30C7\u30D0\u30A4\u30B9\u306E\u66F4\u65B0\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
20285
+ loadFailed: "\u30C7\u30D0\u30A4\u30B9\u4E00\u89A7\u306E\u8AAD\u307F\u8FBC\u307F\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
20286
+ localDevice: "\u30ED\u30FC\u30AB\u30EB\u30C7\u30D0\u30A4\u30B9",
20287
+ subtitle: "{{username}}@{{host}}:{{port}}",
20288
+ modify: "\u30C7\u30D0\u30A4\u30B9\u3092\u5909\u66F4",
20289
+ delete: "\u524A\u9664"
20290
+ },
20291
+ terminal: {
20292
+ initializing: "\u30BF\u30FC\u30DF\u30CA\u30EB\u3092\u521D\u671F\u5316\u4E2D...",
20293
+ connecting: "\u30C7\u30D0\u30A4\u30B9\u306B\u63A5\u7D9A\u4E2D...",
20294
+ initFailed: "\u30BF\u30FC\u30DF\u30CA\u30EB\u306E\u521D\u671F\u5316\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
20295
+ inputPlaceholder: "\u3053\u3053\u306B\u30B3\u30DE\u30F3\u30C9\u3092\u5165\u529B...",
20296
+ clear: "\u30AF\u30EA\u30A2",
20297
+ deviceError: "\u30C7\u30D0\u30A4\u30B9\u30A8\u30E9\u30FC",
20298
+ deviceErrorWithType: "[{{type}}] \u30C7\u30D0\u30A4\u30B9\u30A8\u30E9\u30FC",
20299
+ noDeviceSelected: "\u30C7\u30D0\u30A4\u30B9\u304C\u9078\u629E\u3055\u308C\u3066\u3044\u307E\u305B\u3093",
20300
+ 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",
20301
+ 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",
20302
+ bellNotification: "\u30BF\u30FC\u30DF\u30CA\u30EB\u30D9\u30EB\u901A\u77E5",
20303
+ bellDescription: "\u30A6\u30A3\u30F3\u30C9\u30A6 {{window}} \xB7 \u30DA\u30A4\u30F3 {{pane}}",
20304
+ bellFallback: "tmux \u30D9\u30EB\u3092\u53D7\u4FE1",
20305
+ paneTitle: "\u30DA\u30A4\u30F3 {{index}}",
20306
+ activePane: "\u73FE\u5728\u306E\u30DA\u30A4\u30F3",
20307
+ activeWindow: "\u73FE\u5728\u306E\u30A6\u30A3\u30F3\u30C9\u30A6",
20308
+ editorPlaceholder: "\u3053\u3053\u306B\u30B3\u30DE\u30F3\u30C9\u3092\u5165\u529B...",
20309
+ editorClear: "\u30AF\u30EA\u30A2",
20310
+ editorSendWithEnter: "Enter \u3067\u9001\u4FE1",
20311
+ editorSendLineByLine: "1\u884C\u305A\u3064\u9001\u4FE1",
20312
+ editorSend: "\u9001\u4FE1",
20313
+ sendShortcut: "{{key}} \u3092\u9001\u4FE1",
20314
+ inputModeDirect: "\u76F4\u63A5\u5165\u529B",
20315
+ inputModeEditor: "\u30A8\u30C7\u30A3\u30BF",
20316
+ newWindow: "\u65B0\u898F\u30A6\u30A3\u30F3\u30C9\u30A6",
20317
+ closeWindow: "\u30A6\u30A3\u30F3\u30C9\u30A6\u3092\u9589\u3058\u308B",
20318
+ closePane: "\u30DA\u30A4\u30F3\u3092\u9589\u3058\u308B"
20319
+ },
20320
+ settings: {
20321
+ title: "\u30B7\u30B9\u30C6\u30E0\u8A2D\u5B9A",
20322
+ siteSettings: "\u30B5\u30A4\u30C8\u8A2D\u5B9A",
20323
+ siteName: "\u30B5\u30A4\u30C8\u540D",
20324
+ siteNamePlaceholder: "tmex",
20325
+ siteUrl: "\u30B5\u30A4\u30C8 URL",
20326
+ siteUrlPlaceholder: "http://localhost:3000",
20327
+ bellThrottle: "\u30D9\u30EB\u5236\u9650\uFF08\u79D2\uFF09",
20328
+ enableBrowserBellToast: "\u30D6\u30E9\u30A6\u30B6\u30D9\u30EB Toast \u3092\u6709\u52B9\u306B\u3059\u308B",
20329
+ enableTelegramBellPush: "Telegram \u30D9\u30EB\u30D7\u30C3\u30B7\u30E5\u3092\u6709\u52B9\u306B\u3059\u308B",
20330
+ sshReconnectRetries: "SSH \u518D\u63A5\u7D9A\u8A66\u884C\u56DE\u6570",
20331
+ sshReconnectDelay: "SSH \u518D\u63A5\u7D9A\u5F85\u6A5F\uFF08\u79D2\uFF09",
20332
+ language: "\u8A00\u8A9E",
20333
+ languagePlaceholder: "\u8A00\u8A9E\u3092\u9078\u629E",
20334
+ language_en_US: "English",
20335
+ language_zh_CN: "\u7B80\u4F53\u4E2D\u6587",
20336
+ language_ja_JP: "\u65E5\u672C\u8A9E",
20337
+ theme: "\u30C6\u30FC\u30DE",
20338
+ themeLight: "\u30E9\u30A4\u30C8",
20339
+ themeDark: "\u30C0\u30FC\u30AF",
20340
+ siteTab: "\u30B5\u30A4\u30C8",
20341
+ notificationsTab: "\u901A\u77E5",
20342
+ refreshToApply: "\u8A00\u8A9E\u5909\u66F4\u3092\u9069\u7528\u3059\u308B\u306B\u306F\u66F4\u65B0\u3057\u3066\u304F\u3060\u3055\u3044",
20343
+ saveSettings: "\u8A2D\u5B9A\u3092\u4FDD\u5B58",
20344
+ settingsSaved: "\u8A2D\u5B9A\u3092\u4FDD\u5B58\u3057\u307E\u3057\u305F",
20345
+ saveFailed: "\u8A2D\u5B9A\u306E\u4FDD\u5B58\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
20346
+ loadFailed: "\u8A2D\u5B9A\u306E\u8AAD\u307F\u8FBC\u307F\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
20347
+ restartGateway: "Gateway \u3092\u518D\u8D77\u52D5",
20348
+ restartScheduled: "Gateway \u306E\u518D\u8D77\u52D5\u304C\u4E88\u5B9A\u3055\u308C\u307E\u3057\u305F",
20349
+ restartConfirm: "Gateway \u3092\u518D\u8D77\u52D5\u3057\u3066\u3082\u3088\u308D\u3057\u3044\u3067\u3059\u304B\uFF1F\u3059\u3079\u3066\u306E\u30A2\u30AF\u30C6\u30A3\u30D6\u63A5\u7D9A\u304C\u4E2D\u65AD\u3055\u308C\u307E\u3059\u3002",
20350
+ restartFailed: "Gateway \u306E\u518D\u8D77\u52D5\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
20351
+ sshReconnectMaxRetries: "SSH \u518D\u63A5\u7D9A\u8A66\u884C\u56DE\u6570"
20352
+ },
20353
+ telegram: {
20354
+ title: "Telegram Bot \u7BA1\u7406",
20355
+ botName: "Bot \u540D",
20356
+ botNamePlaceholder: "\u4F8B\uFF1Aops-bot",
20357
+ botToken: "Bot Token",
20358
+ botTokenPlaceholder: "123456:AA...",
20359
+ addBot: "Bot \u3092\u8FFD\u52A0",
20360
+ enableBot: "Bot \u3092\u6709\u52B9\u306B\u3059\u308B",
20361
+ allowAuthRequests: "\u8A8D\u8A3C\u30EA\u30AF\u30A8\u30B9\u30C8\u3092\u8A31\u53EF",
20362
+ pendingChats: "\u627F\u8A8D\u5F85\u3061",
20363
+ chats: "\u627F\u8A8D\u6E08\u307F",
20364
+ authorizedChats: "\u627F\u8A8D\u6E08\u307F",
20365
+ noPendingChats: "\u627F\u8A8D\u5F85\u3061\u306E\u30C1\u30E3\u30C3\u30C8\u306F\u3042\u308A\u307E\u305B\u3093",
20366
+ noAuthorizedChats: "\u627F\u8A8D\u6E08\u307F\u306E\u30C1\u30E3\u30C3\u30C8\u306F\u3042\u308A\u307E\u305B\u3093",
20367
+ approve: "\u627F\u8A8D",
20368
+ authorize: "\u8A8D\u8A3C",
20369
+ reject: "\u62D2\u5426",
20370
+ revokeAuth: "\u8A8D\u8A3C\u3092\u53D6\u308A\u6D88\u3059",
20371
+ testMessage: "\u30C6\u30B9\u30C8\u30E1\u30C3\u30BB\u30FC\u30B8",
20372
+ sendTestMessage: "\u30C6\u30B9\u30C8\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u9001\u4FE1",
20373
+ deleteBot: "Bot \u3092\u524A\u9664",
20374
+ tokenOptional: "Token\uFF08\u5909\u66F4\u3057\u306A\u3044\u5834\u5408\u306F\u7A7A\uFF09",
20375
+ tokenPlaceholder: "\u65B0\u3057\u3044 token \u3092\u5165\u529B",
20376
+ botCreated: "Bot \u3092\u4F5C\u6210\u3057\u307E\u3057\u305F",
20377
+ botUpdated: "Bot \u3092\u66F4\u65B0\u3057\u307E\u3057\u305F",
20378
+ botDeleted: "Bot \u3092\u524A\u9664\u3057\u307E\u3057\u305F",
20379
+ authApproved: "\u8A8D\u8A3C\u304C\u627F\u8A8D\u3055\u308C\u307E\u3057\u305F",
20380
+ chatRemoved: "\u30C1\u30E3\u30C3\u30C8\u3092\u524A\u9664\u3057\u307E\u3057\u305F",
20381
+ testMessageSent: "\u30C6\u30B9\u30C8\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u9001\u4FE1\u3057\u307E\u3057\u305F",
20382
+ createFailed: "Bot \u306E\u4F5C\u6210\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
20383
+ updateFailed: "Bot \u306E\u66F4\u65B0\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
20384
+ deleteFailed: "Bot \u306E\u524A\u9664\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
20385
+ approveFailed: "\u8A8D\u8A3C\u306E\u627F\u8A8D\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
20386
+ removeFailed: "\u30C1\u30E3\u30C3\u30C8\u306E\u524A\u9664\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
20387
+ testMessageFailed: "\u30C6\u30B9\u30C8\u30E1\u30C3\u30BB\u30FC\u30B8\u306E\u9001\u4FE1\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
20388
+ loadBotsFailed: "Bot \u4E00\u89A7\u306E\u8AAD\u307F\u8FBC\u307F\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
20389
+ loadChatsFailed: "\u30C1\u30E3\u30C3\u30C8\u4E00\u89A7\u306E\u8AAD\u307F\u8FBC\u307F\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
20390
+ noBots: "Bot \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u307E\u305A\u8FFD\u52A0\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
20391
+ expand: "\u5C55\u958B",
20392
+ collapse: "\u6298\u308A\u305F\u305F\u3080",
20393
+ authCount: "\u627F\u8A8D\u6E08\u307F {{authorized}} / \u627F\u8A8D\u5F85\u3061 {{pending}}\uFF08\u6700\u5927 8\uFF09",
20394
+ chatId: "Chat ID",
20395
+ applyTime: "\u7533\u8ACB\u6642\u9593",
20396
+ gatewayOnline: "\uD83D\uDFE2 Gateway online @ {{siteName}}",
20397
+ authSuccess: "\u2705 \u627F\u8A8D\u3055\u308C\u307E\u3057\u305F\u3002\u901A\u77E5\u3092\u53D7\u4FE1\u3067\u304D\u307E\u3059\u3002",
20398
+ authPending: "\u23F3 \u8A8D\u8A3C\u30EA\u30AF\u30A8\u30B9\u30C8\u3092\u53D7\u4FE1\u3057\u307E\u3057\u305F\u3002tmex \u8A2D\u5B9A\u30DA\u30FC\u30B8\u3067\u627F\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
20399
+ authFailed: "\u274C \u8A8D\u8A3C\u30EA\u30AF\u30A8\u30B9\u30C8\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u7BA1\u7406\u8005\u306B\u9023\u7D61\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
20400
+ testMessageTemplate: `\uD83E\uDDEA \u30C6\u30B9\u30C8\u30E1\u30C3\u30BB\u30FC\u30B8
20401
+ \u30B5\u30A4\u30C8\uFF1A{{siteName}}
20402
+ \u6642\u9593\uFF1A{{time}}`,
20403
+ approveMessageTemplate: `\u2705 tmex \u3067\u627F\u8A8D\u3055\u308C\u307E\u3057\u305F\u3002
20404
+ Bot\uFF1A{{botName}}
20405
+ \u6642\u9593\uFF1A{{time}}`,
20406
+ botNotFound: "Bot \u304C\u898B\u3064\u304B\u3089\u306A\u3044\u304B\u5229\u7528\u3067\u304D\u307E\u305B\u3093",
20407
+ botNotRunning: "Bot \u304C\u8D77\u52D5\u3057\u3066\u3044\u306A\u3044\u304B\u5229\u7528\u3067\u304D\u307E\u305B\u3093"
20408
+ },
20409
+ webhook: {
20410
+ title: "Webhooks",
20411
+ url: "Webhook URL",
20412
+ secret: "\u30B7\u30FC\u30AF\u30EC\u30C3\u30C8",
20413
+ secretPlaceholder: "\u7F72\u540D\u306B\u4F7F\u7528\uFF08HMAC-SHA256\uFF09",
20414
+ enabled: "\u6709\u52B9",
20415
+ eventMask: "\u30A4\u30D9\u30F3\u30C8",
20416
+ add: "Webhook \u3092\u8FFD\u52A0",
20417
+ empty: "Webhook \u304C\u3042\u308A\u307E\u305B\u3093\u3002",
20418
+ createFailed: "Webhook \u306E\u4F5C\u6210\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
20419
+ deleteFailed: "Webhook \u306E\u524A\u9664\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
20420
+ loadFailed: "Webhook \u306E\u8AAD\u307F\u8FBC\u307F\u306B\u5931\u6557\u3057\u307E\u3057\u305F"
20421
+ },
20422
+ sshError: {
20423
+ sshConfigRefNotSupported: "\u3053\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3067\u306F SSH Config \u53C2\u7167\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002host + username \u3092\u4F7F\u7528\u3057\u3001Agent/\u79D8\u5BC6\u9375/\u30D1\u30B9\u30EF\u30FC\u30C9\u8A8D\u8A3C\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
20424
+ configRefNotSupported: "\u3053\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3067\u306F SSH Config \u53C2\u7167\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002host + username \u3092\u4F7F\u7528\u3057\u3001Agent/\u79D8\u5BC6\u9375/\u30D1\u30B9\u30EF\u30FC\u30C9\u8A8D\u8A3C\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
20425
+ agentUnavailable: "SSH Agent \u304C\u5229\u7528\u3067\u304D\u307E\u305B\u3093\uFF1ASSH_AUTH_SOCK \u304C\u691C\u51FA\u3055\u308C\u307E\u305B\u3093\u3002agent \u74B0\u5883\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
20426
+ agentNoIdentity: "SSH Agent \u306B\u5229\u7528\u53EF\u80FD\u306A\u9375\u304C\u3042\u308A\u307E\u305B\u3093\u3002ssh-add \u3092\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
20427
+ agentNoIdentities: "SSH Agent \u306B\u5229\u7528\u53EF\u80FD\u306A\u9375\u304C\u3042\u308A\u307E\u305B\u3093\u3002ssh-add \u3092\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
20428
+ authFailed: "\u8A8D\u8A3C\u306B\u5931\u6557\u3057\u307E\u3057\u305F\uFF1A\u30E6\u30FC\u30B6\u30FC\u540D\u3001\u30D1\u30B9\u30EF\u30FC\u30C9\u3001\u307E\u305F\u306F\u9375\u304C\u6B63\u3057\u304F\u3042\u308A\u307E\u305B\u3093\u3002\u30C7\u30D0\u30A4\u30B9\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
20429
+ authFailedGeneric: "\u8A8D\u8A3C\u306B\u5931\u6557\u3057\u307E\u3057\u305F\uFF1A\u30E6\u30FC\u30B6\u30FC\u540D\u3001\u30D1\u30B9\u30EF\u30FC\u30C9\u3001\u307E\u305F\u306F\u9375\u304C\u6B63\u3057\u304F\u3042\u308A\u307E\u305B\u3093\u3002\u30C7\u30D0\u30A4\u30B9\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
20430
+ networkUnreachable: "\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u306B\u5230\u9054\u3067\u304D\u307E\u305B\u3093\uFF1A\u30EB\u30FC\u30C6\u30A3\u30F3\u30B0\u3001\u30D5\u30A1\u30A4\u30A2\u30A6\u30A9\u30FC\u30EB\u3001\u307E\u305F\u306F VPN \u8A2D\u5B9A\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
20431
+ connectionRefused: "\u63A5\u7D9A\u304C\u62D2\u5426\u3055\u308C\u307E\u3057\u305F\uFF1A\u30BF\u30FC\u30B2\u30C3\u30C8\u30DB\u30B9\u30C8\u306B\u63A5\u7D9A\u3067\u304D\u307E\u305B\u3093\u3002\u30DB\u30B9\u30C8\u30A2\u30C9\u30EC\u30B9\u3068\u30DD\u30FC\u30C8\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
20432
+ timeout: "\u63A5\u7D9A\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\uFF1A\u30C7\u30D0\u30A4\u30B9\u306B\u63A5\u7D9A\u3067\u304D\u307E\u305B\u3093\u3002\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u307E\u305F\u306F\u30D5\u30A1\u30A4\u30A2\u30A6\u30A9\u30FC\u30EB\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
20433
+ connectionTimeout: "\u63A5\u7D9A\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\uFF1A\u30C7\u30D0\u30A4\u30B9\u306B\u63A5\u7D9A\u3067\u304D\u307E\u305B\u3093\u3002\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u307E\u305F\u306F\u30D5\u30A1\u30A4\u30A2\u30A6\u30A9\u30FC\u30EB\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
20434
+ hostNotFound: "\u30DB\u30B9\u30C8\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\uFF1A\u30DB\u30B9\u30C8\u540D\u3092\u89E3\u6C7A\u3067\u304D\u307E\u305B\u3093\u3002DNS \u307E\u305F\u306F\u30DB\u30B9\u30C8\u540D\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
20435
+ handshakeFailed: "\u30CF\u30F3\u30C9\u30B7\u30A7\u30A4\u30AF\u306B\u5931\u6557\u3057\u307E\u3057\u305F\uFF1A\u5B89\u5168\u306A\u63A5\u7D9A\u3092\u78BA\u7ACB\u3067\u304D\u307E\u305B\u3093\u3002\u30AD\u30FC\u4EA4\u63DB\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0\u304C\u4E92\u63DB\u6027\u304C\u306A\u3044\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002",
20436
+ tmuxUnavailable: "\u30EA\u30E2\u30FC\u30C8 tmux \u304C\u5229\u7528\u3067\u304D\u306A\u3044\u304B\u8D77\u52D5\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002tmux \u304C\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3055\u308C -CC \u30E2\u30FC\u30C9\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u3066\u3044\u308B\u3053\u3068\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
20437
+ unknown: "\u63A5\u7D9A\u306B\u5931\u6557\u3057\u307E\u3057\u305F\uFF1A{{message}}",
20438
+ reconnecting: "\u63A5\u7D9A\u304C\u4E2D\u65AD\u3055\u308C\u307E\u3057\u305F\u3002{{delay}} \u79D2\u5F8C\u306B\u518D\u63A5\u7D9A\u3057\u307E\u3059\uFF08{{attempt}}/{{maxRetries}}\uFF09",
20439
+ reconnectFailed: "\u81EA\u52D5\u518D\u63A5\u7D9A\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u624B\u52D5\u3067\u518D\u8A66\u884C\u3057\u3066\u304F\u3060\u3055\u3044",
20440
+ reconnected: "\u30C7\u30D0\u30A4\u30B9\u304C\u81EA\u52D5\u7684\u306B\u518D\u63A5\u7D9A\u3055\u308C\u307E\u3057\u305F"
20441
+ },
20442
+ websocket: {
20443
+ error: "WebSocket \u63A5\u7D9A\u30A8\u30E9\u30FC",
20444
+ checkGateway: "Gateway \u72B6\u614B\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044",
20445
+ upgradeFailed: "\u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C9\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
20446
+ invalidMessage: "\u7121\u52B9\u306A\u30E1\u30C3\u30BB\u30FC\u30B8\u5F62\u5F0F"
20447
+ },
20448
+ wsError: {
20449
+ checkGateway: "Gateway \u72B6\u614B\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044"
20450
+ },
20451
+ apiError: {
20452
+ siteNameRequired: "\u30B5\u30A4\u30C8\u540D\u306F\u7A7A\u306B\u3067\u304D\u307E\u305B\u3093",
20453
+ siteUrlInvalid: "\u30B5\u30A4\u30C8 URL \u306F http:// \u307E\u305F\u306F https:// \u3067\u59CB\u307E\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059",
20454
+ bellThrottleInvalid: "\u30D9\u30EB\u5236\u9650\u79D2\u6570\u306F 0-300 \u306E\u9593\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059",
20455
+ sshRetriesInvalid: "SSH \u518D\u63A5\u7D9A\u8A66\u884C\u56DE\u6570\u306F 0-20 \u306E\u9593\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059",
20456
+ sshDelayInvalid: "SSH \u518D\u63A5\u7D9A\u5F85\u6A5F\u6642\u9593\u306F 1-300 \u79D2\u306E\u9593\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059",
20457
+ languageInvalid: "\u8A00\u8A9E\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u308B\u30ED\u30B1\u30FC\u30EB\u306E\u3044\u305A\u308C\u304B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059",
20458
+ botNameRequired: "Bot \u540D\u306F\u7A7A\u306B\u3067\u304D\u307E\u305B\u3093",
20459
+ botTokenRequired: "Bot token \u306F\u7A7A\u306B\u3067\u304D\u307E\u305B\u3093",
20460
+ missingFields: "\u5FC5\u9808\u30D5\u30A3\u30FC\u30EB\u30C9\u304C\u3042\u308A\u307E\u305B\u3093",
20461
+ sshRequiresHost: "SSH \u30C7\u30D0\u30A4\u30B9\u306B\u306F host \u307E\u305F\u306F sshConfigRef \u304C\u5FC5\u8981\u3067\u3059",
20462
+ invalidRequest: "\u7121\u52B9\u306A\u30EA\u30AF\u30A8\u30B9\u30C8",
20463
+ deviceNotFound: "\u30C7\u30D0\u30A4\u30B9\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",
20464
+ botNotFound: "Bot \u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",
20465
+ chatNotFound: "\u30C1\u30E3\u30C3\u30C8\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",
20466
+ urlAndSecretRequired: "URL \u3068\u30B7\u30FC\u30AF\u30EC\u30C3\u30C8\u304C\u5FC5\u8981\u3067\u3059",
20467
+ notFound: "\u898B\u3064\u304B\u308A\u307E\u305B\u3093"
20468
+ },
20469
+ notification: {
20470
+ clickToJump: "\u5BFE\u5FDC\u3059\u308B\u30DA\u30A4\u30F3\u306B\u30B8\u30E3\u30F3\u30D7",
20471
+ eventType: {
20472
+ terminal_bell: "\uD83D\uDD14 \u30BF\u30FC\u30DF\u30CA\u30EB\u30D9\u30EB",
20473
+ tmux_window_close: "\uD83E\uDE9F \u30A6\u30A3\u30F3\u30C9\u30A6\u9589\u3058\u308B",
20474
+ tmux_pane_close: "\uD83D\uDCF1 \u30DA\u30A4\u30F3\u9589\u3058\u308B",
20475
+ device_tmux_missing: "\u26A0\uFE0F Tmux \u304C\u3042\u308A\u307E\u305B\u3093",
20476
+ device_disconnect: "\uD83D\uDD0C \u30C7\u30D0\u30A4\u30B9\u5207\u65AD",
20477
+ session_created: "\uD83C\uDD95 \u30BB\u30C3\u30B7\u30E7\u30F3\u4F5C\u6210",
20478
+ session_closed: "\uD83D\uDEAA \u30BB\u30C3\u30B7\u30E7\u30F3\u9589\u3058\u308B"
20479
+ },
20480
+ site: "\u30B5\u30A4\u30C8",
20481
+ device: "\u30C7\u30D0\u30A4\u30B9",
20482
+ window: "\u30A6\u30A3\u30F3\u30C9\u30A6",
20483
+ pane: "\u30DA\u30A4\u30F3",
20484
+ time: "\u6642\u9593",
20485
+ directLink: "\u76F4\u63A5\u30EA\u30F3\u30AF",
20486
+ message: "\u30E1\u30C3\u30BB\u30FC\u30B8",
20487
+ telegramBell: {
20488
+ title: "\uD83D\uDD14 {{siteName}} \u304B\u3089\u306E\u30D9\u30EB\uFF1A{{terminalTopbarLabel}}",
20489
+ viewLink: "\u8868\u793A",
20490
+ terminalTopbarLabel: "\u30A6\u30A3\u30F3\u30C9\u30A6 {{window}} \xB7 \u30DA\u30A4\u30F3 {{pane}} @ {{device}}"
20491
+ }
20492
+ },
20493
+ sidebar: {
20494
+ noWindows: "\u30A6\u30A3\u30F3\u30C9\u30A6\u304C\u3042\u308A\u307E\u305B\u3093",
20495
+ noDevices: "\u30C7\u30D0\u30A4\u30B9\u304C\u3042\u308A\u307E\u305B\u3093",
20496
+ addDeviceLink: "\u30C7\u30D0\u30A4\u30B9\u3092\u8FFD\u52A0",
20497
+ openSettingsLink: "\u8A2D\u5B9A\u3092\u958B\u304F",
20498
+ openSettings: "\u8A2D\u5B9A\u3092\u958B\u304F",
20499
+ manageDevices: "\u30C7\u30D0\u30A4\u30B9\u7BA1\u7406",
20500
+ settings: "\u8A2D\u5B9A",
20501
+ currentWindow: "\u73FE\u5728\u306E\u30A6\u30A3\u30F3\u30C9\u30A6",
20502
+ currentPane: "\u73FE\u5728\u306E\u30DA\u30A4\u30F3",
20503
+ newWindow: "\u30A6\u30A3\u30F3\u30C9\u30A6\u3092\u4F5C\u6210",
20504
+ closeWindow: "\u30A6\u30A3\u30F3\u30C9\u30A6\u3092\u9589\u3058\u308B",
20505
+ closePane: "\u30DA\u30A4\u30F3\u3092\u9589\u3058\u308B",
20506
+ addDevice: "\u30C7\u30D0\u30A4\u30B9\u3092\u8FFD\u52A0"
20507
+ },
20508
+ validation: {
20509
+ deviceNameRequired: "\u30C7\u30D0\u30A4\u30B9\u540D\u306F\u5FC5\u9808\u3067\u3059",
20510
+ hostRequired: "SSH \u30C7\u30D0\u30A4\u30B9\u306B\u306F\u30DB\u30B9\u30C8\u30A2\u30C9\u30EC\u30B9\u304C\u5FC5\u8981\u3067\u3059"
20511
+ }
20512
+ }
20143
20513
  }
20144
20514
  };
20145
-
20146
- // ../shared/src/index.ts
20147
20515
  var DEFAULT_LOCALE = "en_US";
20148
20516
  function toBCP47(locale) {
20149
20517
  return locale.replace("_", "-");
20150
20518
  }
20151
-
20519
+ var AVAILABLE_LOCALES = ["en_US", "zh_CN", "ja_JP"];
20152
20520
  // ../../node_modules/.bun/uuid@11.1.0/node_modules/uuid/dist/esm/stringify.js
20153
20521
  var byteToHex = [];
20154
20522
  for (let i = 0;i < 256; ++i) {
@@ -26679,8 +27047,7 @@ var siteSettings = sqliteTable("site_settings", {
26679
27047
  language: text("language").notNull().default("en_US"),
26680
27048
  updatedAt: text("updated_at").notNull()
26681
27049
  }, (table) => [
26682
- check("site_settings_singleton_check", sql`${table.id} = 1`),
26683
- check("site_settings_language_check", sql`${table.language} in ('en_US', 'zh_CN')`)
27050
+ check("site_settings_singleton_check", sql`${table.id} = 1`)
26684
27051
  ]);
26685
27052
  var devices = sqliteTable("devices", {
26686
27053
  id: text("id").primaryKey(),
@@ -51446,7 +51813,7 @@ function normalizeSiteSettingsInput(body) {
51446
51813
  }
51447
51814
  if (body.language !== undefined) {
51448
51815
  const value = body.language.trim();
51449
- if (value !== "en_US" && value !== "zh_CN") {
51816
+ if (!AVAILABLE_LOCALES.includes(value)) {
51450
51817
  throw new Error(t2("apiError.languageInvalid"));
51451
51818
  }
51452
51819
  updates.language = value;
@@ -51786,8 +52153,8 @@ async function handleGetManifest(method) {
51786
52153
  start_url: "/",
51787
52154
  scope: "/",
51788
52155
  display: "standalone",
51789
- background_color: "#0d1117",
51790
- theme_color: "#0d1117",
52156
+ background_color: "#0b1020",
52157
+ theme_color: "#0b1020",
51791
52158
  icons: [
51792
52159
  {
51793
52160
  src: "/tmex.png",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tmex-cli",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "tmex": "./bin/tmex.js",
@@ -21,7 +21,8 @@
21
21
  "build:runtime": "bun build src/runtime/server.ts --outdir ./dist/runtime --target bun --format esm",
22
22
  "build:cli": "bun build src/cli-node.ts --outfile ./dist/cli-node.js --target node --format esm",
23
23
  "build": "bun run clean && bun run bundle:resources && bun run build:runtime && bun run build:cli",
24
- "test": "bun test src"
24
+ "test": "bun test src",
25
+ "publish": "bun publish"
25
26
  },
26
27
  "devDependencies": {
27
28
  "@types/bun": "latest",
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Copyright (c) 2014 The xterm.js authors. All rights reserved.
3
+ * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)
4
+ * https://github.com/chjj/term.js
5
+ * @license MIT
6
+ *
7
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ * of this software and associated documentation files (the "Software"), to deal
9
+ * in the Software without restriction, including without limitation the rights
10
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ * copies of the Software, and to permit persons to whom the Software is
12
+ * furnished to do so, subject to the following conditions:
13
+ *
14
+ * The above copyright notice and this permission notice shall be included in
15
+ * all copies or substantial portions of the Software.
16
+ *
17
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
+ * THE SOFTWARE.
24
+ *
25
+ * Originally forked from (with the author's permission):
26
+ * Fabrice Bellard's javascript vt100 for jslinux:
27
+ * http://bellard.org/jslinux/
28
+ * Copyright (c) 2011 Fabrice Bellard
29
+ * The original design remains. The terminal itself
30
+ * has been extended to include xterm CSI codes, among
31
+ * other features.
32
+ */.xterm{cursor:text;position:relative;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{padding:0;border:0;margin:0;position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;overflow-y:scroll;cursor:default;position:absolute;right:0;left:0;top:0;bottom:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm .xterm-scroll-area{visibility:hidden}.xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility,.xterm .xterm-message{position:absolute;left:0;top:0;bottom:0;right:0;z-index:10;color:transparent;pointer-events:none}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{text-decoration:double underline}.xterm-underline-3{text-decoration:wavy underline}.xterm-underline-4{text-decoration:dotted underline}.xterm-underline-5{text-decoration:dashed underline}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.xterm-overline.xterm-underline-2{text-decoration:overline double underline}.xterm-overline.xterm-underline-3{text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;position:absolute;top:0;right:0;pointer-events:none}.xterm-decoration-top{z-index:2;position:relative}