termdock 1.4.128 → 1.4.129

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 (67) hide show
  1. package/.desktop-dist/main.js +78 -7
  2. package/dist/client/assets/{ModelPreview-Ki--VGiC.js → ModelPreview-DA71QiMN.js} +1 -1
  3. package/dist/client/assets/{abnfDiagram-VRR7QNED-_MScG92N.js → abnfDiagram-VRR7QNED-vwQxXhvY.js} +1 -1
  4. package/dist/client/assets/{arc-t9qRCmSV.js → arc-KcBV2d81.js} +1 -1
  5. package/dist/client/assets/{architectureDiagram-ZJ3FMSHR-sFlMCTBw.js → architectureDiagram-ZJ3FMSHR-BKm_EWca.js} +1 -1
  6. package/dist/client/assets/{blockDiagram-677ZJIJ3-ssxX4KkU.js → blockDiagram-677ZJIJ3-DAQx8c-B.js} +1 -1
  7. package/dist/client/assets/{c4Diagram-LMCZKHZV-BCz5LtTX.js → c4Diagram-LMCZKHZV-BeYeekky.js} +1 -1
  8. package/dist/client/assets/channel-jqLwHPeC.js +1 -0
  9. package/dist/client/assets/{chunk-2Q5K7J3B-CDimwARA.js → chunk-2Q5K7J3B-DHqXZZU-.js} +1 -1
  10. package/dist/client/assets/{chunk-32BRIVSS-CDmUf83L.js → chunk-32BRIVSS-D1m2Benc.js} +1 -1
  11. package/dist/client/assets/{chunk-5VM5RSS4-DLtTCYUg.js → chunk-5VM5RSS4-CtOKKO1w.js} +1 -1
  12. package/dist/client/assets/{chunk-EX3LRPZG-w_FWq-tH.js → chunk-EX3LRPZG-CXjhbuNm.js} +1 -1
  13. package/dist/client/assets/{chunk-JWPE2WC7-B0zV1WOe.js → chunk-JWPE2WC7-C0Zq6OdN.js} +1 -1
  14. package/dist/client/assets/{chunk-MOJQB5TN-C2VFDFd0.js → chunk-MOJQB5TN-BlkCCLDm.js} +1 -1
  15. package/dist/client/assets/{chunk-RYQCIY6F-BaaZmXwK.js → chunk-RYQCIY6F-Cz6TWAav.js} +1 -1
  16. package/dist/client/assets/{chunk-V7JOEXUC-p5cKhdl6.js → chunk-V7JOEXUC-DhLyQr8d.js} +1 -1
  17. package/dist/client/assets/{chunk-VR4S4FIN-DzfT9at0.js → chunk-VR4S4FIN-DSnFyHH_.js} +1 -1
  18. package/dist/client/assets/{chunk-XXDRQBXY-C1zTdwEh.js → chunk-XXDRQBXY-C2ISI6ro.js} +1 -1
  19. package/dist/client/assets/classDiagram-OUVF2IWQ-DFjGJuxW.js +1 -0
  20. package/dist/client/assets/classDiagram-v2-EOCWNBFH-DFjGJuxW.js +1 -0
  21. package/dist/client/assets/{cose-bilkent-JH36ORCC-BGHVpXFF.js → cose-bilkent-JH36ORCC-DQVr0EsM.js} +1 -1
  22. package/dist/client/assets/{cynefin-VYW2F7L2-BwZxg1VK.js → cynefin-VYW2F7L2-BP6p28mL.js} +1 -1
  23. package/dist/client/assets/{cynefinDiagram-TSTJHNR4-D49XyIFA.js → cynefinDiagram-TSTJHNR4-CPUSyMuB.js} +1 -1
  24. package/dist/client/assets/{dagre-VKFMJZFB-DXoRuv6O.js → dagre-VKFMJZFB-C_zQd2eB.js} +1 -1
  25. package/dist/client/assets/{diagram-FQU43EPY-D0vgZCfK.js → diagram-FQU43EPY-RkUQLZyi.js} +1 -1
  26. package/dist/client/assets/{diagram-G47NLZAW-9K9fR0Z0.js → diagram-G47NLZAW-CtjAPFXS.js} +1 -1
  27. package/dist/client/assets/{diagram-NH7WQ7WH-CIIC3eUC.js → diagram-NH7WQ7WH-C5xtKZ-W.js} +1 -1
  28. package/dist/client/assets/{diagram-OA4YK3LP-CA3Uw6Ea.js → diagram-OA4YK3LP-CrbMkTb7.js} +1 -1
  29. package/dist/client/assets/{diagram-WEI45ONY-dhaSf1fa.js → diagram-WEI45ONY-DAF4URgC.js} +1 -1
  30. package/dist/client/assets/{ebnfDiagram-CCIWWBDH-0bWc11Yz.js → ebnfDiagram-CCIWWBDH-ni71VSx1.js} +1 -1
  31. package/dist/client/assets/{erDiagram-Q63AITRT-C4FPyL3a.js → erDiagram-Q63AITRT-DODYotxF.js} +1 -1
  32. package/dist/client/assets/{flowDiagram-23GEKE2U-DXY0Jxj_.js → flowDiagram-23GEKE2U-CN1Vp7G4.js} +1 -1
  33. package/dist/client/assets/{ganttDiagram-NO4QXBWP-RPMjjnRd.js → ganttDiagram-NO4QXBWP-DoVPMnyV.js} +1 -1
  34. package/dist/client/assets/{gitGraphDiagram-IHSO6WYX-Bf4HUqTl.js → gitGraphDiagram-IHSO6WYX-jiV9FRlU.js} +1 -1
  35. package/dist/client/assets/{index-D75wYB98.js → index-DPj6Kass.js} +4 -4
  36. package/dist/client/assets/{infoDiagram-FWYZ7A6U-ZqP7Ocf3.js → infoDiagram-FWYZ7A6U-Bk78PinY.js} +1 -1
  37. package/dist/client/assets/{ishikawaDiagram-FXEZZL3T-BzdFAcyT.js → ishikawaDiagram-FXEZZL3T-C3lsh4Lh.js} +1 -1
  38. package/dist/client/assets/{journeyDiagram-5HDEW3XC-BfSvMq6y.js → journeyDiagram-5HDEW3XC-CHLuYRBt.js} +1 -1
  39. package/dist/client/assets/{kanban-definition-HUTT4EX6-Dpf9hCl5.js → kanban-definition-HUTT4EX6-UXjM1jpV.js} +1 -1
  40. package/dist/client/assets/{linear-ZmI28AZz.js → linear-BKUyrWyw.js} +1 -1
  41. package/dist/client/assets/{mermaid.core-BTzHsVSr.js → mermaid.core-Bhj0Bx21.js} +4 -4
  42. package/dist/client/assets/{mindmap-definition-LN4V7U3C-By5Ie3jN.js → mindmap-definition-LN4V7U3C-Dxv1Vfld.js} +1 -1
  43. package/dist/client/assets/{pegDiagram-2B236MQR--NolZ5bc.js → pegDiagram-2B236MQR-DYZ4d5zF.js} +1 -1
  44. package/dist/client/assets/{pieDiagram-ENE6RG2P-DI-Y6Yz-.js → pieDiagram-ENE6RG2P-BoId8qhV.js} +1 -1
  45. package/dist/client/assets/{quadrantDiagram-ABIIQ3AL-DYnBddBB.js → quadrantDiagram-ABIIQ3AL-sswrNp8d.js} +1 -1
  46. package/dist/client/assets/{railroadDiagram-RFXS5EU6-DOOkdA8K.js → railroadDiagram-RFXS5EU6-BfYV2CjC.js} +1 -1
  47. package/dist/client/assets/{requirementDiagram-TGXJPOKE-BO_adPJj.js → requirementDiagram-TGXJPOKE-DZhZPZVt.js} +1 -1
  48. package/dist/client/assets/{sankeyDiagram-HTMAVEWB-LVYAe84b.js → sankeyDiagram-HTMAVEWB-DXKoOi7e.js} +1 -1
  49. package/dist/client/assets/{sequenceDiagram-DBY2YBRQ-DAkGCs0T.js → sequenceDiagram-DBY2YBRQ-CpulK2HV.js} +1 -1
  50. package/dist/client/assets/{sizeCapture-X5ZJPWSS-CszARDsf.js → sizeCapture-X5ZJPWSS-D-mlzS9r.js} +1 -1
  51. package/dist/client/assets/{stateDiagram-2N3HPSRC-DUs3aedx.js → stateDiagram-2N3HPSRC-l_ydCaW0.js} +1 -1
  52. package/dist/client/assets/stateDiagram-v2-6OUMAXLB-Gh5mC4sm.js +1 -0
  53. package/dist/client/assets/{swimlanes-5IMT3BWC-Duig5jF-.js → swimlanes-5IMT3BWC-eEUQLyov.js} +2 -2
  54. package/dist/client/assets/swimlanesDiagram-G3AALYLV-CFuSbo_y.js +8 -0
  55. package/dist/client/assets/{timeline-definition-FHXFAJF6-BKW9IU-6.js → timeline-definition-FHXFAJF6-Bu7sztn9.js} +1 -1
  56. package/dist/client/assets/{vennDiagram-L72KCM5P-Cet4IXwa.js → vennDiagram-L72KCM5P-Bat45ZW0.js} +1 -1
  57. package/dist/client/assets/{wardleyDiagram-EHGQE667-DgoE-0pr.js → wardleyDiagram-EHGQE667-Bxn0-4Oq.js} +1 -1
  58. package/dist/client/assets/{xychartDiagram-FW5EYKEG-BqJ_UrZL.js → xychartDiagram-FW5EYKEG-C4BdUEul.js} +1 -1
  59. package/dist/client/index.html +1 -1
  60. package/dist/client/sw.js +1 -1
  61. package/package.json +1 -1
  62. package/runtime-manifest.json +1 -1
  63. package/dist/client/assets/channel-DLbt-DA1.js +0 -1
  64. package/dist/client/assets/classDiagram-OUVF2IWQ-CtCQ5VTR.js +0 -1
  65. package/dist/client/assets/classDiagram-v2-EOCWNBFH-CtCQ5VTR.js +0 -1
  66. package/dist/client/assets/stateDiagram-v2-6OUMAXLB-B8crJAxl.js +0 -1
  67. package/dist/client/assets/swimlanesDiagram-G3AALYLV-Di4AbqD1.js +0 -8
@@ -14,6 +14,8 @@ import { checkForDesktopUpdates, checkForRuntimeUpdates, configureDesktopUpdater
14
14
  import { resolvePackagedRuntime, rollbackDownloadedRuntime, } from './runtime.js';
15
15
  import { isExternalLinkStagingUrl, isSafeExternalUrl } from './externalLinks.js';
16
16
  import { shouldThrottleDesktopRenderer } from './windowPolicy.js';
17
+ import { checkConnectedServiceRuntime, getConnectedServiceRuntimeState, restartConnectedServiceRuntime, } from './connectedServiceRuntime.js';
18
+ import { isOwnedDesktopRuntimeTarget } from './runtimeTarget.js';
17
19
  import { canOfferCertificateTrust, downloadCertificateAuthority, isCertificateTrustError, isLocalNetworkHostname, } from './certificateTrust.js';
18
20
  const execFileAsync = promisify(execFile);
19
21
  const currentDir = path.dirname(fileURLToPath(import.meta.url));
@@ -67,6 +69,8 @@ let menuBarStatusWidth = 0;
67
69
  let floatingWidgetWindow = null;
68
70
  let floatingPositionTimer = null;
69
71
  let desktopRuntimeOwnerServer = null;
72
+ let connectedServiceRuntimePollTimer = null;
73
+ let connectedServiceRuntimePollInFlight = false;
70
74
  let isQuitting = false;
71
75
  const FLOATING_WIDGET_WIDTHS = [64, 108, 152];
72
76
  const FLOATING_WIDGET_HEIGHT = 40;
@@ -1171,6 +1175,62 @@ async function restartDesktopManagedRuntime() {
1171
1175
  restartTimer.unref();
1172
1176
  return getDesktopRuntimeUpdateState();
1173
1177
  }
1178
+ function isOwnedDesktopRuntimeWindow(window, status) {
1179
+ const origin = windowServiceOrigins.get(window);
1180
+ if (!origin || !status.running || status.probe?.desktopManaged !== true || !status.state)
1181
+ return false;
1182
+ const localAddresses = new Set(Object.values(os.networkInterfaces())
1183
+ .flatMap((addresses) => addresses?.map((address) => address.address.toLowerCase()) ?? []));
1184
+ return isOwnedDesktopRuntimeTarget({
1185
+ origin,
1186
+ servicePort: status.state.port,
1187
+ desktopManaged: true,
1188
+ localAddresses,
1189
+ });
1190
+ }
1191
+ async function routeRuntimeOperationForWindow(webContents, desktopOperation, serviceOperation) {
1192
+ const sourceWindow = BrowserWindow.fromWebContents(webContents);
1193
+ if (!sourceWindow || !windowServiceOrigins.has(sourceWindow)) {
1194
+ throw new Error('只能从已连接的 Termdock 服务窗口操作 Runtime。');
1195
+ }
1196
+ const status = await getLocalServiceStatus();
1197
+ return isOwnedDesktopRuntimeWindow(sourceWindow, status)
1198
+ ? desktopOperation()
1199
+ : serviceOperation();
1200
+ }
1201
+ function startConnectedServiceRuntimePolling() {
1202
+ if (connectedServiceRuntimePollTimer)
1203
+ return;
1204
+ const poll = async () => {
1205
+ if (connectedServiceRuntimePollInFlight)
1206
+ return;
1207
+ connectedServiceRuntimePollInFlight = true;
1208
+ try {
1209
+ const status = await getLocalServiceStatus();
1210
+ await Promise.all(BrowserWindow.getAllWindows().map(async (window) => {
1211
+ if (window.isDestroyed() || !windowServiceOrigins.has(window))
1212
+ return;
1213
+ if (isOwnedDesktopRuntimeWindow(window, status))
1214
+ return;
1215
+ try {
1216
+ const state = await getConnectedServiceRuntimeState(window.webContents);
1217
+ if (!window.isDestroyed()) {
1218
+ window.webContents.send('desktop:runtime-update-state-changed', state);
1219
+ }
1220
+ }
1221
+ catch {
1222
+ // A disconnected or older service will be retried on the next poll.
1223
+ }
1224
+ }));
1225
+ }
1226
+ finally {
1227
+ connectedServiceRuntimePollInFlight = false;
1228
+ }
1229
+ };
1230
+ void poll();
1231
+ connectedServiceRuntimePollTimer = setInterval(() => void poll(), 2_000);
1232
+ connectedServiceRuntimePollTimer.unref();
1233
+ }
1174
1234
  function writeRuntimeOwnerResponse(response, statusCode, payload) {
1175
1235
  response.writeHead(statusCode, { 'content-type': 'application/json; charset=utf-8' });
1176
1236
  response.end(JSON.stringify(payload));
@@ -1208,6 +1268,9 @@ async function startDesktopRuntimeOwnerServer() {
1208
1268
  resolve();
1209
1269
  });
1210
1270
  });
1271
+ server.on('error', (error) => {
1272
+ console.error('[desktop-runtime] owner socket failed', error);
1273
+ });
1211
1274
  fs.chmodSync(desktopRuntimeOwnerSocketPath, 0o600);
1212
1275
  desktopRuntimeOwnerServer = server;
1213
1276
  }
@@ -1704,9 +1767,9 @@ function installIpcHandlers() {
1704
1767
  ipcMain.handle('desktop:update-state', () => getDesktopUpdateState());
1705
1768
  ipcMain.handle('desktop:check-update', () => checkForDesktopUpdates());
1706
1769
  ipcMain.handle('desktop:install-update', () => installDownloadedDesktopUpdate());
1707
- ipcMain.handle('desktop:runtime-update-state', () => getDesktopRuntimeUpdateState());
1708
- ipcMain.handle('desktop:check-runtime-update', () => checkForRuntimeUpdates());
1709
- ipcMain.handle('desktop:restart-runtime', () => restartDesktopManagedRuntime());
1770
+ ipcMain.handle('desktop:runtime-update-state', (event) => routeRuntimeOperationForWindow(event.sender, () => getDesktopRuntimeUpdateState(), () => getConnectedServiceRuntimeState(event.sender)));
1771
+ ipcMain.handle('desktop:check-runtime-update', (event) => routeRuntimeOperationForWindow(event.sender, () => checkForRuntimeUpdates(), () => checkConnectedServiceRuntime(event.sender)));
1772
+ ipcMain.handle('desktop:restart-runtime', (event) => routeRuntimeOperationForWindow(event.sender, () => restartDesktopManagedRuntime(), () => restartConnectedServiceRuntime(event.sender)));
1710
1773
  ipcMain.handle('desktop:show-connection-center', () => showConnectionCenter());
1711
1774
  ipcMain.handle('desktop:reveal-data-directory', async () => {
1712
1775
  fs.mkdirSync(termdockDir, { recursive: true, mode: 0o700 });
@@ -1992,11 +2055,15 @@ app.whenReady().then(async () => {
1992
2055
  }
1993
2056
  });
1994
2057
  subscribeDesktopRuntimeUpdateState((state) => {
1995
- for (const window of BrowserWindow.getAllWindows()) {
1996
- if (!window.isDestroyed())
1997
- window.webContents.send('desktop:runtime-update-state-changed', state);
1998
- }
2058
+ void getLocalServiceStatus().then((status) => {
2059
+ for (const window of BrowserWindow.getAllWindows()) {
2060
+ if (!window.isDestroyed() && isOwnedDesktopRuntimeWindow(window, status)) {
2061
+ window.webContents.send('desktop:runtime-update-state-changed', state);
2062
+ }
2063
+ }
2064
+ });
1999
2065
  });
2066
+ startConnectedServiceRuntimePolling();
2000
2067
  const startupConfig = readDesktopConfig();
2001
2068
  const restoreUrls = startupConfig.openConnectionUrls;
2002
2069
  startupRestoreActive = true;
@@ -2057,6 +2124,10 @@ app.on('before-quit', () => {
2057
2124
  isQuitting = true;
2058
2125
  desktopRuntimeOwnerServer?.close();
2059
2126
  desktopRuntimeOwnerServer = null;
2127
+ if (connectedServiceRuntimePollTimer)
2128
+ clearInterval(connectedServiceRuntimePollTimer);
2129
+ connectedServiceRuntimePollTimer = null;
2130
+ connectedServiceRuntimePollInFlight = false;
2060
2131
  fs.rmSync(desktopRuntimeOwnerSocketPath, { force: true });
2061
2132
  });
2062
2133
  export { PROTOCOL_VERSION };